子串和charindex的奇怪现象

时间:2018-03-27 11:10:49

标签: sql sql-server

比较下面的代码片段时,您可以看到“结果1”结果集的最后一个元素,只有一个字符(逗号)附加数字,而其他数字(第1 - 3行)有一个逗号和附加我想要的4位数的数字。

在'Result 2'结果集中,我特意将子字符串的长度更改为字符串长度减去两个字符,但最后一个元素只删除单个元素,即尾随逗号,而行1-3消除了数字和尾随逗号。最后一行没有空格。请有人可以告诉为什么会这样吗?

代码1:

select substring(c,2,charindex(',',c,2)) as empno
       from table t
   where len(c) > 1
       and substring(c,1,1) = ','

结果1:

7654,7
7698,7
7782,7
7788,

代码2:

select substring(c,2,charindex(',',c,2)-2) as empno
       from table t
   where len(c) > 1
       and substring(c,1,1) = ','

结果2:

7654
7698
7782
7788

*编辑:表格t是: -

 c
    ----------------------
    ,7654,7698,7782,7788,
    7654,7698,7782,7788,
    654,7698,7782,7788,
    54,7698,7782,7788,
    4,7698,7782,7788,
    ,7698,7782,7788,
    7698,7782,7788,
    698,7782,7788,
    98,7782,7788,
    8,7782,7788,
    ,7782,7788,
    7782,7788,
    782,7788,
    82,7788,
    2,7788,
    ,7788,
    7788,
    788,
    88,
    8,
    ,

1 个答案:

答案 0 :(得分:0)

CHARINDEX:

Returns part of a character, binary, text, or image expression in SQL Server.

定义为:

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

AND

<强> SUBSTRING:

Returns part of a character, binary, text, or image expression in SQL Server.

定义为:

SUBSTRING ( expression ,start , length ) 

查询1:

substring(c,2,charindex(',',c,2))

在上面,charIndex在每种情况下返回','的第一个位置,即6。 因此,返回的值将作为子字符串的长度6,这就是您获取6 lengths的每条记录的原因。

查询2:

substring(c,2,charindex(',',c,2)-2)

在上面,charIndex在每种情况下返回','的第一个位置,即6。但你也reducing the lengthsubtracting 2开始。 因此,返回的值将作为子串的长度,现在为4,这就是为什么在此查询中获取4 lengths的每条记录的原因。

请参阅此query1,query2代表CHARINDEX返回的值:

       c                query1  query2
,7654,7698,7782,7788,   6        4
,7698,7782,7788,        6        4
,7782,7788,             6        4
,7788,                  6        4