将T-SQL填充列放入另一列

时间:2012-09-24 06:04:06

标签: sql-server-2008 tsql

我有两列(A, B),就像这样......

A           B
12_18_19    20

我希望在同一SELECT语句中添加第3列(C),如此...

C
12_18_20_19

换句话说,我的列A由“_”分隔,因此列A的倒数第二个索引应为列B

如果可能的话,我会在同样的SELECT声明中做这一切......

A         B    C
12_18_19  20   12_18_20_19

2 个答案:

答案 0 :(得分:4)

怎么样:

SELECT 
    A, B, 
    C = SUBSTRING(A, 1, LEN(A) - CHARINDEX('_', REVERSE(A))) + 
        '_' + B + 
        SUBSTRING(A, LEN(A) + 1 - CHARINDEX('_', REVERSE(A)), 999)
FROM 
    dbo.YourTable 

它有点牵扯,主要是因为T-SQL中没有LASTCHARINDEX()函数。

第一个表达式将A列解析为最后_个分隔符,并在此之前采取所有操作。然后,它会附加一个_和一列B,然后在<{1}} _ A之后抓取之后的所有并追加它。

Andriy M在评论中正确地提到:如果ABNULL,那么整个结果也是NULL。如果列是空字符串,或者A不包含任何_个字符,则您可能会收到错误(因为解析会失败)或unexpected, messy results

答案 1 :(得分:1)

在Andriy的分析之后编辑处理更多情况。

虽然@Marc_s的回答有效,但这是一个稍好的解决方案

SELECT A,B, stuff(a+'  ', len(A)+2- charindex('_',reverse(A)+'_') 
,0, case when A='' then B ELSE B+'_' end) C 
FROM 
(SELECT '12_18_19' A, '20' B) t

将最后一行替换为您的表格