如何从SQL中的varchar字符串中提取动态值

时间:2017-08-06 09:37:42

标签: sql sql-server-2008

我有一个varchar字符串,如下所示

@msg='YOUR TRXN 30206008 CREDITED.FOR ANY QUERIES CONTACT US ON OUR HOTLINE'

我想从字符串上面提取TRXN号码。

1 个答案:

答案 0 :(得分:1)

假设号码始终位于'TRXN'之后,您可以使用substringcharindexrightlenpatindex的组合来提取数字:

SELECT  SUBSTRING(
            @msg, 
            CHARINDEX('TRXN', @msg) + 5, 
            PATINDEX('%[^0-9]%', 
                     RIGHT(
                        @msg, LEN(@msg) - CHARINDEX('TRXN', @msg) - 4)
                    )
        )

另一种不那么麻烦的方法是使用东西,但是你需要2个选择语句:

SELECT @msg = STUFF(@msg, 1, CHARINDEX('TRXN', @msg) + 4, '') 

SELECT STUFF(@msg, PATINDEX('%[^0-9]%', @msg), LEN(@msg), '')

如果您的交易号始终跟随'CREDITED',您可以使用更简单的选择语句:

SELECT  SUBSTRING(
            @msg, 
            CHARINDEX('TRXN', @msg) + 5, 
            CHARINDEX('CREDITED', @msg) - CHARINDEX('TRXN', @msg) - 5
        )

See a live demo on rextester.