这句话有什么问题,它仍然在场后给我空格。这让我觉得结合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
答案 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