sql - 使用 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-MAESTRO
和INNSAMMLET
。这是我写的:
SELECT SUBSTRING(ReceiptText, CHARINDEX('MAESTRO', ReceiptText), CHARINDEX('INNSAMLET',
ReceiptText) - CHARINDEX('MAESTRO', ReceiptText) + Len('INNSAMLET'))
From DaysTakings
这是结果:
MAESTRO 1 NOK 79,00 -------------------- 因萨姆雷特
我只需要,79
但我不知道如何进一步缩小范围。
解决方案
您需要使用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]
.
推荐阅读
- spring - 无法获得 JDBC 连接;嵌套异常是 java.sql.SQLException: JZ002: Password property '' too long。最大长度为 30
- svg - 转型
- html - 为什么当我向上然后向下滚动时,我无法在移动/chrome 响应式上滚动 div?
- r - 从 Shiny 启动 R 进程
- python - 实例方法的装饰器
- java - 使用 reactor netty 为 spring-webflux WebClient 配置 HostnameVerifier
- pow - JAGS - pow 函数在带有标签切换的混合模型中无法正常工作
- angular - Firebase:访问目录数据资产中的 csv 文件时出现 404 错误
- javascript - html选择只返回第一个选项
- javascript - 对类属性的引用为空