2010-08-05 55 views
1

此声明有什么问题,它仍然在字段后给予空格。这让我认为结合WHEN语句的语法是关闭的。我的老板希望他们在一个声明中合并。我究竟做错了什么?“LTRIM(RTRIM())”的T-SQL语法问题无法正常工作

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

不好意思输入代码并且发指令。它是 ase WHEN LTRIM(RTRIM(cSHortName))=''然后NULL 当cShortname不是NULL然后 REPLACE(cShortName,SUBSTRING,(cShortName,PATINDEX('%A-Za-z0-9“”},1 ,')_' end AS SHORT_NAME – JMS49 2010-08-05 22:19:43

回答

0

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

编辑:

据我理解你试图删除从字符串不匹配这个正则表达式范围内的任意字符[A-ZA-Z0-9](添加所需的任何其他字符保存)。

我看到没有干净的方式来使用内置函数在Microsoft SQL Server(你似乎使用Microsoft SQL Server)中做到这一点。网上有一些使用临时表和while循环的例子,但这很丑陋。我会按照原样返回字符串并在调用方处理它们,或者编写一个使用CLR来执行此操作并从select语句中调用它的函数。

我希望这会有所帮助。

+0

LTRIM(str):从字符串的开头删除所有空格 RTRIM(str):删除字符串末尾的所有空格 这两个用于连接对方是相当于TRIM – JMS49 2010-08-05 22:23:04

+0

你想达到什么? – akonsu 2010-08-05 22:51:36

+0

嗨akonsu,我试图删除所有空间周围的领域,我带来了一个旧文件从一个旧表没有编辑和空间上的任何一个新的文件第二个WHEN语句是删除在结果中不显示的ASCII字符,但肯定存在。我看到的大多数角色是......就像某人多次击中了空格键,或者这是一个省略号,它看起来像一个回车符。最经常的是省略号.... – JMS49 2010-08-05 23:48:24

0

TRIM替换为LTRIM

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

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 
+0

试过这个&得到这个错误: Msg 8116,Level 16,State 1,Line 3 参数数据类型int对于patindex函数的参数2是无效的。 – JMS49 2010-08-05 22:34:34

+0

由于OMGPonies表示,请尝试用PATINDEX('%A-Za-z0-9“”}',cShortName)替换它, – websch01ar 2010-08-05 22:45:28

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