0

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

A           B
12_18_19    20

我想在这样的同一SELECT语句中添加第三列(C)......

C
12_18_20_19

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

如果可能的话,我会在这样的同SELECT一条语句中完成所有这些......

A         B    C
12_18_19  20   12_18_20_19
4

2 回答 2

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列解析到最后一个_分隔符,并获取之前的所有内容。然后它附加 a_和 column B,然后从最后一个分隔符之后抓取所有内容并将其附加。_A

正如 Andriy M 在他的评论中正确提到的那样:如果Aor Bare NULL,那么整个结果也是 NULL。如果列是空字符串,或者A不包含任何_字符,您可能会收到错误(因为解析将失败)或意外的混乱结果

于 2012-09-24T06:05:49.620 回答
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

用您的表格替换最后一行

于 2012-09-24T07:55:10.397 回答