首页 > 解决方案 > 使用 Substring 从列中检索部分字符串并处理

问题描述

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

ReceiptText 列包含如下字符串:

Parthenons 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 79,00 -------------------- INNSAMLEET 69 总计 11302,00 KORTAVTALER UTEN OMSETNING SKRIVES 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 -------------------- 因萨姆雷特

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

标签: sqlsql-servertsql

解决方案


您需要使用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].


推荐阅读