从字符串中选择数字

时间:2016-07-27 14:56:17

标签: tsql

我有这个问题,我试图开始工作,可以从字符串中提取十进制数,这样它们就是自己的列。目标是然后比较它们的顺序值,所以它们也需要转换为十进制(虽然获取字符串中的数字是主要问题)

我使用的示例是字符串" OrdRevenuePay 3200.00 - > 2836.07,OrdRate 3200.00 - > 2836.07"

我需要将该字符串中的每个数字作为自己的列。到目前为止我能够选择第一个值,但第二个值也是返回其他部分。这是我到目前为止一直在使用的查询:

DECLARE @str VARCHAR(128)
SET @str = 'OrdRevenuePay 3200.00 -> 2836.07, OrdRate 3200.00 -> 2836.07'
SELECT  SUBSTRING(@str,CHARINDEX(' ',@str)+1,CHARINDEX('->',@str)-CHARINDEX(' ',@str)-1) as col1
,  SUBSTRING(@str,CHARINDEX('->',@str,1)+2,LEN(@str)-CHARINDEX(', OrdRate',@str,1)-1) as col2

1 个答案:

答案 0 :(得分:0)

DECLARE @str VARCHAR(128)
SET @str = 'OrdRevenuePay 3200.00 -> 2836.07, OrdRate 3200.00 -> 2836.07'

; WITH ReplaceX
    AS (
        SELECT REPLACE(REPLACE(LEFT(@str,CHARINDEX(',',@str)-1),' -> ','`'),' ','~') + '|' +
        REPLACE(REPLACE(RIGHT(@str,LEN(@str) - CHARINDEX(',',@str) - 1),' -> ','}'),' ','{') + '^' AS NewString
        )

SELECT  SUBSTRING(NewString,CHARINDEX('~',NewString)+1,CHARINDEX('`',NewString)-CHARINDEX('~',NewString)-1),
        SUBSTRING(NewString,CHARINDEX('`',NewString)+1,CHARINDEX('|',NewString)-CHARINDEX('`',NewString)-1),
        SUBSTRING(NewString,CHARINDEX('{',NewString)+1,CHARINDEX('}',NewString)-CHARINDEX('{',NewString)-1),
        SUBSTRING(NewString,CHARINDEX('}',NewString)+1,CHARINDEX('^',NewString)-CHARINDEX('}',NewString)-1)
    FROM ReplaceX