CHARINDEX和LEN

时间:2018-09-15 20:22:43

标签: sql-server

我在名称列中有字符串 anyname#

我需要忽略

我尝试使用LEFT (name, CHARINDEX ('#', name) - 1),但没有用,但是使用LEFT (name, LEN (name) - 1)正常。

CHARINDEXLEN都返回整数值

您能解释为什么我不能将{strong>-1 与CHARINDEX一起使用,而不能与LEN一起使用吗?

2 个答案:

答案 0 :(得分:0)

虽然不是您要寻找的解释,但为什么不能使用TRIM()这样的功能

SELECT TRIM( '#' FROM  'anyname#') AS col

答案 1 :(得分:0)

  • LEFT (name,LEN(name) - 1)将仅忽略最后的宪章。

  • LEFT (name, CHARINDEX('#', name) - 1)将找到#宪章显示的位置编号。

在您的情况下,我将使用replace函数忽略 replace(name,'#','')

这里有一个示例#没有显示在最后的宪章中。

CREATE TABLE T(name varchar(50));

INSERT INTO T VALUES ('anyn#ame');

select LEFT (name, CHARINDEX ('#', name) - 1), 
       LEFT(name, LEN (name) - 1),
       replace(name,'#','')
from t

sqlfiddle