sql - 从字符串中找出数字部分并将其存储为十进制数据类型
问题描述
我尝试使用 patindex 来查找字符串中数字值的开头。我的目标是只从字符串中提取数字部分,不包括 %。
使用以下查询,这是我的结果:
选择 Column_Desc, Replace(substring([Column_Desc], PatIndex('%[0-9]%', [Column_Desc]), len([Column_Desc])),'%','') 作为 New_Value
Column_Desc
- 我的税率是 18.8% **。
- 13.8%是我的税率。
- 我的税率 15.9% 你的呢?
新值
- 18.8
- 13.8是我的税率。
- 15.9 你的是什么?
因此,结果(New_Value)应该是 18.8、13.8 和 15.9,数据类型为十进制。我无法让它工作。请指教。谢谢!
解决方案
在您的示例中,这些数字都是 4 个字符长。如果这总是正确的,那么最简单的方法是:
select Column_Desc,
convert(decimal(5, 1),
left(stuff(Column_Desc, 1,
patindex('%[0-9]%', Column_Desc) - 1, ''), 4)
) as new_value
这是一个db<>fiddle。
SQL Server 没有很好的字符串处理功能。因此,能够对您正在寻找的字符串做出这样的假设可以简化代码。
推荐阅读
- python - 创建一个结束 mainloop 并在 tkinter 中启动新的函数
- javascript - 为什么在 react native 中使用 flatlist 不会在屏幕上显示 firebase 数据
- file - Shopify Theme Kit 文件错误:“包含非法字符”
- r - 过滤特定变量的小标题,但保留不匹配的行并用 NA/NULL 填充
- c++ - DX9 中 LookAt 矩阵计算需要说明
- mysql - mysql查询。如何使其他结果为空?
- reactjs - gatsby-plugin-image 使用给定的道具加载图像
- amazon-web-services - Glue爬虫如何加载Redshift表中的数据?
- c# - C#
- 如何检查列表中的非唯一值?
- java - 使用 2 个 Transaction 实例和嵌套方法不会回滚事务