3

「PersonNameID」という列名があります

2 つの値を含む

ABCD-GHJI
ABHK-67891
HJKK-HJJJMH-8990

「-」の後に数字を含む「PersonNameID」の最初の部分のみを抽出する必要があります。理想的には、私の出力は

ABCD-GHJI
ABHK
HJKK-HJJJMH

しかし、次のコードを使用すると:

SELECT TOP 100

     CONVERT(NVARCHAR(100),

     SUBSTRING(PersonNameID, 1,
          CASE
               WHEN CHARINDEX('-', PersonNameID) > 0 
                    THEN LEN(PersonNameID) - 
                         LEN(REVERSE(SUBSTRING(REVERSE(PersonNameID), 1, CHARINDEX('-', REVERSE(PersonNameID))))) 
                    ELSE LEN(PersonNameID)

          END
     )
     ) AS New_PersonNameID
FROM Person

出力は次のようになります

ABCD
ABHK
HJKK

目的の出力を得るために上記のコードを変更しますか?

4

5 に答える 5

1

のようなものはどうですか

DECLARE @Person TABLE(
        PersonNameID VARCHAR(50)
)

INSERT INTO @Person VALUES ('ABCD-GHJI'),('ABHK-67891')

SELECT           top 100 
CASE
    WHEN CHARINDEX('-',PersonNameID ) = 0
        THEN PersonNameID
    WHEN ISNUMERIC(RIGHT(PersonNameID,LEN(PersonNameID) - CHARINDEX('-',PersonNameID ))) = 0
        THEN PersonNameID
    ELSE LEFT(PersonNameID, CHARINDEX('-',PersonNameID )-1)
END AS New_PersonNameID
from @Person

SQL フィドルのデモ

于 2013-07-26T05:30:50.613 に答える
1
  SELECT TOP 100
             (CASE 
    WHEN CHARINDEX('-',PersonNameID )>0 AND 
          iSNUMERIC( rIGHT(PersonNameID ,CHARINDEX('-',PersonNameID )))=1
        THEN 
        lEFT(PersonNameID ,CHARINDEX('-',PersonNameID)-1)
       ELSE  
        PersonNameID
         END
        )  AS New_PersonNameID
            FROM Person

SQL フィドルのデモ

于 2013-07-26T05:31:12.270 に答える
1

「-」の後の数値はすべて削除されます。必要に応じて patindex パターンで遊ぶことができます。

SELECT 
    CASE WHEN PATINDEX('%-_[0-9]%',PersonNameID)>0 THEN LEFT(PersonNameID,CHARINDEX('-',PersonNameID)-1)
         ELSE PersonNameID
    END 
    AS New_PersonNameID
FROM Person
于 2013-07-26T07:03:05.053 に答える
0

上記の状況の解決策を見つけました...

DECLARE @Person TABLE(
Person_NAME_Original VARCHAR(500),
Person_NAME_Modified VARCHAR(500)
)           

INSERT INTO @Person (Person_NAME_Original,Person_NAME_Modified)

SELECT top 1000 PersonNameID,
       CASE WHEN CHARINDEX('-',PersonNameID) = 0
                 THEN PersonNameID
            WHEN iSNUMERIC( rIGHT(PersonNameID ,CHARINDEX('-',REVERSE(PersonNameID))-1))=1
                 THEN  LEFT(PersonNameID, len(PersonNameID) - CHARINDEX('-',REVERSE(PersonNameID) )-1)
            ELSE PersonNameID
       END AS New_PersonNameID
from Person                                

select * from @Person         
于 2013-07-29T10:43:49.800 に答える