sql server中数字上的子字符串

问题描述 投票:3回答:5

我有一个名为“ PersonNameID”的列名

包含两个值

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

是否对以上代码进行了修改以获得所需的输出?

sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2
5个回答
2
投票

使用模式匹配找到数字,然后找出数字在哪里


1
投票

怎么样?


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

1
投票

[-之后的任何数字都将被删除。您可以根据需要使用patindex模式。


0
投票

我已经找到了解决上述情况的方法...

© www.soinside.com 2019 - 2024. All rights reserved.