Tsql T-SQL语法问题,带有“QUOTE”;LTRIM(RTRIM())”的缩写;工作不正常

Tsql T-SQL语法问题,带有“QUOTE”;LTRIM(RTRIM())”的缩写;工作不正常,tsql,trim,spaces,Tsql,Trim,Spaces,这句话有什么不对,它还在字段后面给我空格。这使我认为组合WHEN语句的语法是关闭的。我的老板想把它们合并在一份声明中。我做错了什么 Case WHEN LTRIM(RTRIM(cSHortName))= '' Then NULL WHEN cShortname is NOT NULL THEN REPLACE (cShortName,SUBSTRING,(cShortName,PATINDEX('%A-Za-z0-9""},1,) ''_ end AS SHORT_

这句话有什么不对,它还在字段后面给我空格。这使我认为组合WHEN语句的语法是关闭的。我的老板想把它们合并在一份声明中。我做错了什么

Case WHEN LTRIM(RTRIM(cSHortName))= '' Then NULL 
     WHEN cShortname is NOT NULL THEN 
       REPLACE (cShortName,SUBSTRING,(cShortName,PATINDEX('%A-Za-z0-9""},1,) ''_ 
end AS SHORT_NAME

为什么你认为它不应该给你场地后的空间

编辑:

据我所知,您正试图从字符串中删除与此正则表达式范围[a-zA-Z0-9]不匹配的任何字符(添加任何其他要保留的字符)

在Microsoft SQL Server(您似乎正在使用Microsoft SQL Server)中,使用内置函数,我看不出有什么干净的方法可以做到这一点。网络上有一些使用临时表和while循环的例子,但这很难看。我要么按原样返回字符串并在调用者端处理它们,要么编写一个函数,使用并从select语句调用它


我希望这会有帮助。

为什么你认为它不应该在场地后给你空间

编辑:

据我所知,您正试图从字符串中删除与此正则表达式范围[a-zA-Z0-9]不匹配的任何字符(添加任何其他要保留的字符)

在Microsoft SQL Server(您似乎正在使用Microsoft SQL Server)中,使用内置函数,我看不出有什么干净的方法可以做到这一点。网络上有一些使用临时表和while循环的例子,但这很难看。我要么按原样返回字符串并在调用者端处理它们,要么编写一个函数,使用并从select语句调用它


我希望这有帮助。

LTRIM
替换
TRIM


您还可以测试
LEN(cShortName)=0
LTRIM
替换
TRIM


您还可以测试LEN(cShortName)=0

嗯,此脚本中似乎存在一些问题,但请尝试此方法

Case 
     WHEN LTRIM(RTRIM(cSHortName))= '' Then NULL
     WHEN cShortname is NOT NULL THEN REPLACE(cShortName, SUBSTRING(cShortName, PATINDEX('%A-Za-z0-9', 1) , ''), '') 
end AS SHORT_NAME

嗯,这个脚本似乎有一些问题,但是试试这个

Case 
     WHEN LTRIM(RTRIM(cSHortName))= '' Then NULL
     WHEN cShortname is NOT NULL THEN REPLACE(cShortName, SUBSTRING(cShortName, PATINDEX('%A-Za-z0-9', 1) , ''), '') 
end AS SHORT_NAME

从代码判断,您可能试图从字符串的开头和结尾去除空格和非字母数字字符

如果是这样,这对你有用吗? 我认为它提供了从第一个字母数字出现到最后一个字母数字出现的子字符串

SELECT
SUBSTRING(
 cShortName,
 PATINDEX('%A-Za-z0-9',cShortName),
  ( LEN(cShortName)
   -PATINDEX('%A-Za-z0-9',REVERSE(cShortName))
   -PATINDEX('%A-Za-z0-9',cShortName)
  )
) AS SHORTNAME

从代码判断,您可能试图从字符串的开头和结尾去除空格和非字母数字字符

如果是这样,这对你有用吗? 我认为它提供了从第一个字母数字出现到最后一个字母数字出现的子字符串

SELECT
SUBSTRING(
 cShortName,
 PATINDEX('%A-Za-z0-9',cShortName),
  ( LEN(cShortName)
   -PATINDEX('%A-Za-z0-9',REVERSE(cShortName))
   -PATINDEX('%A-Za-z0-9',cShortName)
  )
) AS SHORTNAME

对不起,用手输入代码,而且手指粗大。当LTRIM(RTRIM(cSHortName))=''时为ase,当cSHortName不为NULL时为NULL,然后替换(cSHortName,SUBSTRING,(cSHortName,PATINDEX(“%A-Za-z0-9”“),1,)''以短名称结尾,或者用粗手指键入代码。当LTRIM(RTRIM(cSHortName))时为ase=''然后在cShortname不为NULL时为NULL,然后替换(cShortname,SUBSTRING,(cShortname,PATINDEX(“%A-Za-z0-9”“},1,)''结束为SHORT\U NAMELTRIM(str):删除字符串开头的所有空格。RTRIM(str):删除字符串结尾处的所有空格。这两个空格相互配合使用,相当于TRIMwhat you thing you thing to reach?您好,akonsu,我正在尝试删除字段周围的所有空格,我正在将字段从没有编辑且在右侧、左侧或两侧都有空格的旧表中带入一个新文件。第二个空格是步骤是删除输出结果中不显示但确实存在的ASCII字符。我看到的大多数字符是…,就像有人多次敲击空格键,或者它是一个省略号,看起来像回车符。通常是省略号…,对于记录,
LTRIM()
没有“删除所有空格”。它删除前导空格,但对制表符、换行符或其他空格不做任何操作。LTRIM(str):删除字符串开头的所有空格。RTRIM(str):删除字符串结尾处的所有空格。这两个空格相互配合使用,相当于TRIMwhat you thing you thing to reach?您好,akonsu,我正在尝试删除字段周围的所有空格,我正在将字段从没有编辑且在右侧、左侧或两侧都有空格的旧表中带入一个新文件。第二个空格是步骤是删除输出结果中没有显示但确实存在的ASCII字符。我看到的大多数字符是…,就像有人打了几次空格键,或者它是一个省略号,看起来像回车符。通常是省略号。对于记录,
LTRIM()
没有”删除所有空格”。它删除前导空格,但对制表符、换行符或其他空格不做任何操作。尝试此操作并获得以下错误:Msg 8116,级别16,状态1,第3行参数数据类型int对于patindex函数的参数2无效。如OMGPonies所示,请尝试将其替换为patindex(“%A-Za-z0-9”“}',cShortName)尝试此操作并获得此错误:消息8116,级别16,状态1,第3行参数数据类型int对于patindex函数的参数2无效。如OMGPonies所示,请尝试将其替换为patindex(“%A-Za-z0-9”“}”,cShortName)