我有一系列像这样的身份证号码
ABC/12345/2012
DEF/67891/2013
GHI/23456/2014
KLM/78911/2014
我需要更改它们,使它们看起来像这样
12-12345
13-67891
14-23456
14-78911
14-6634
下面的作品在某种程度上有效,但我有一些只有4个数字,它们应该以零开头。
SELECT RIGHT(ID, 2)+'-'+RIGHT(SUBSTRING(ID, CHARINDEX('/', ID, 1)-1, LEN(ID)-7), 5)
12-12345
13-67891
14-23456
14-78911
14-/6634
所以我需要14- / 6634看起来像14-06634
答案 0 :(得分:2)
假设您的列名是ID,并且'/'字符之间的每个子串的长度不可变(ABC = 3,12345 = 5,2012 = 4):
SELECT RIGHT(ID, 2)+'-'+RIGHT(SUBSTRING(ID, CHARINDEX('/', ID, 1)-1, LEN(ID)-7), 5)
根据您的主要帖子编辑:
SELECT RIGHT(ID, 2)+'-'+REPLACE(RIGHT(SUBSTRING(ID, CHARINDEX('/', ID, 1)-1, LEN(ID)-7), 5), '/', '0')
答案 1 :(得分:0)
试试这个
declare @tmp varchar(50) = 'ABC/12345/2012'
select SUBSTRING(@tmp, len(@tmp) - 1, 2) + '-' + SUBSTRING(@tmp,CHARINDEX('/',@tmp)+1,LEN(@tmp))
它给你
12-12345/2012
现在你必须删除/ 2012
答案 2 :(得分:0)
如果您的数据是固定格式,则可以使用PARSENAME
使用样本数据执行示例:
DECLARE @TestTable TABLE (TestData VARCHAR (50));
INSERT INTO @TestTable (TestData)
SELECT 'ABC/12345/2012' UNION
SELECT 'DEF/67891/2013' UNION
SELECT 'GHI/23456/2014' UNION
SELECT 'KLM/78911/2014'
SELECT RIGHT(PARSENAME(REPLACE(TestData, '/', '.'), 1), 2) + '-' +
PARSENAME(REPLACE(TestData, '/', '.'), 2) AS TestData
FROM @TestTable
结果:
TestData
--------
12-12345
13-67891
14-23456
14-78911