连接各种角色

时间:2017-01-11 10:08:09

标签: sql sql-server-2012

我有一系列像这样的身份证号码

    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

3 个答案:

答案 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