比较下面的代码片段时,您可以看到“结果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,
,
答案 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 length
从subtracting 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