--> 生成测试数据: @T DECLARE @T TABLE (ID VARCHAR(2),TYPE VARCHAR(5)) INSERT INTO @T SELECT '1','1|6' UNION ALL SELECT '2','1|45' UNION ALL SELECT '3','1|892'--SQL查询如下:SELECT ID, RIGHT(type,CHARINDEX('|',REVERSE(type))-1) AS type FROM @T /* ID type ---- ----- 1 6 2 45 3 892(3 行受影响) */
type会有多少个|?
RIGHT(type,CHARINDEX('|',REVERSE(type))-1) AS type
FROM tb
-- Author: liangCK 小梁
-- Date : 2008-11-14 15:20:46
---------------------------------
--> 生成测试数据: @T
DECLARE @T TABLE (ID VARCHAR(2),TYPE VARCHAR(5))
INSERT INTO @T
SELECT '1','1|6' UNION ALL
SELECT '2','1|45' UNION ALL
SELECT '3','1|892'--SQL查询如下:SELECT ID,
RIGHT(type,CHARINDEX('|',REVERSE(type))-1) AS type
FROM @T
/*
ID type
---- -----
1 6
2 45
3 892(3 行受影响)
*/
INSERT @T SELECT 1, '1|6'
INSERT @T SELECT 2, '1|45'
INSERT @T SELECT 3, '1|892'
SELECT RIGHT(TYPE,LEN(TYPE)-CHARINDEX('|',TYPE)) FROM @T
/*
----------
6
45
892
*/
表A
ID TYPE
1 1|6
2 1|45
3 1|892
4 -1
select ID, type =
case when CHARINDEX('|',type) > 0 then substring(type,CHARINDEX('|',type)+1,len(type) - CHARINDEX('|',type))
else type end
from
表A
RIGHT() 函数返回部分字符串,其语法如下:
RIGHT (<character_expression>, <integer_expression>)
RIGHT() 函数返回的子串是从字符串右边第integer_expression 个字符起到最后一个字符的部分。若integer_expression 为负值,则返回NULL 值。
•CHARINDEX()
CHARINDEX() 函数返回字符串中某个指定的子串出现的开始位置,其语法如下:
CHARINDEX (<’substring_expression’>, <expression>)
其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。此函数不能用于TEXT 和IMAGE 数据类型。授人以鱼不如授人以渔!