使用Substring从列中检索部分字符串并进行处理

时间:2019-02-23 21:32:27

标签: sql sql-server tsql

我有一列必须处理以获取字符串的一部分。我知道最终需要修复数据库。但是,目前我没有其他选择。

ReceiptText列包含这样的字符串:

  

帕台农神庙AS 0183 OSLO BAX:604847-71613681 12/11/2018 04:22 AVSTEMMING OVERF:390 01-BankAxept 58 NOK 8513,00 03-VISA 5 NOK 1074,00 04-MASTERCARD 5 NOK 1636,00 14- MAESTRO 1 NOK 79,00 -------------------- INNSAMLET 69总计11302,00 KORTAVTALER上脚安装刀片IKKE UT。

我需要能够检索79,00。该标准基于发现14-MAESTROINNSAMMLET。这是我写的:

SELECT SUBSTRING(ReceiptText, CHARINDEX('MAESTRO', ReceiptText), CHARINDEX('INNSAMLET',
ReceiptText) - CHARINDEX('MAESTRO', ReceiptText) + Len('INNSAMLET'))

From DaysTakings

这是结果:

  

MAESTRO 1 NOK 79,00 -------------------- INNSAMLET

我只需要79,但我不知道如何进一步缩小范围。

1 个答案:

答案 0 :(得分:1)

您需要使用PATINDEX()函数来提取浮点值。尝试使用类似的查询:

 SELECT SUBSTRING(
            SUBSTRING(ReceiptText, CHARINDEX('MAESTRO', ReceiptText) + LEN('MAESTRO'), CHARINDEX('INNSAMLET',ReceiptText) - 
                                                     CHARINDEX('MAESTRO', @ReceiptText) - Len('INNSAMLET') - Len('MAESTRO')),
                      PATINDEX('%[0-9][0-9][,][0-9]%',SUBSTRING(ReceiptText, CHARINDEX('MAESTRO', ReceiptText) + LEN('MAESTRO'), 
                                                     CHARINDEX('INNSAMLET',ReceiptText) - CHARINDEX('MAESTRO', ReceiptText) - Len('INNSAMLET') - Len('MAESTRO'))),5)

结果

  

79.00

请注意,这仅在数字格式为[0-9][0-9],[0-9][0-9]时有效。