“LTRIM(RTRIM())的T-SQL语法问题”无法正常工作

时间:2010-08-05 22:10:29

标签: 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_NAME

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

为什么你认为在场后不应该给你空位?

编辑:

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

我认为使用内置函数在Microsoft SQL Server(您似乎使用的是Microsoft SQL Server)中没有干净的方法。 Web上有一些使用临时表和while循环的例子,但这很难看。我会按原样返回字符串并在调用者端处理它们,或者编写一个使用CLR执行该操作的函数,并从select语句中调用它。

我希望这会有所帮助。

答案 2 :(得分:0)

TRIM替换为LTRIM

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

答案 3 :(得分: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