0

このような2つの列(A, B)があります....

A           B
12_18_19    20

SELECTこのような同じステートメント内に 3 列目 (C) を追加したい...

C
12_18_20_19

つまり、私の列Aは「_」で区切られているため、列の最後から 2 番目のインデックスは columnAである必要があります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 

LASTCHARINDEX()ほとんどの場合、T-SQL には関数がないため、少し複雑です。

最初の式は、最後の区切り文字Aまで列を解析し、それより前のすべてを取得します。_次に、_and columnを追加し、最後の区切り記号のBのすべてを取得して追加します。_A

Andriy M が彼のコメントで正当に述べたように、 ifAまたはBareNULLの場合、結果全体も 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 に答える