在T-SQL中的字符串中的特定短语之间返回单词

时间:2016-07-08 15:11:38

标签: sql-server string tsql

我的专栏详细信息会返回一条很重要的消息,而且我想要提取的唯一内容是数字874659.29。这个数字因行而异,但总是在," CashAmount":和昏迷()之后。

只有一个," CashAmount":但之后有几个昏迷。

  

dhfgdh&安培;%^&安培;%," CashAmount":874659.29" Hasdjhf"&安培; ^%^%

因此,我想知道我是否可以使用任何东西只显示输出列中的数字。

提前致谢!

2 个答案:

答案 0 :(得分:3)

这是另一个选项,只是使用一些字符串操作。

declare @Details varchar(100) = 'dhfgdh&%^&%,"CashAmount":874659.29,"Hasdjhf"&^%^%'

select left(substring(@Details, CHARINDEX('CashAmount":', @Details) + 12 /*12 is the length of CashAmount":*/, LEN(@Details))
    , charindex(',', substring(@Details, CHARINDEX('CashAmount":', @Details) + 12, LEN(@Details))) - 1)

答案 1 :(得分:2)

您可以使用其中一个分割字符串函数,如here ..

所述
declare @string varchar(max)
set @string='dhfgdh&%^&%,"CashAmount":874659.29,"Hasdjhf"&^%^%'

select b.val from 
[dbo].[SplitStrings_Numbers](@string,',')a
cross apply
(
select isnumeric(replace(a.item,'"CashAmount":',1)),replace(a.item,'"CashAmount":',1)
) b(chk,val)
where b.chk=1

<强>输出:
874659.29

只有当数字出现在cashamount之前和之后,以及它没有任何特殊字符时,上述内容才有效。

如果您的号码有特殊字符,您可以使用TRY_PARSE并检查NULL ..