首页 > 解决方案 > 从字符串中找出数字部分并将其存储为十进制数据类型

问题描述

我尝试使用 patindex 来查找字符串中数字值的开头。我的目标是只从字符串中提取数字部分,不包括 %。

使用以下查询,这是我的结果:

选择 Column_Desc, Replace(substring([Column_Desc], PatIndex('%[0-9]%', [Column_Desc]), len([Column_Desc])),'%','') 作为 New_Value

Column_Desc

  1. 我的税率是 18.8% **。
  2. 13.8%是我的税率。
  3. 我的税率 15.9% 你的呢?

新值

  1. 18.8
  2. 13.8是我的税率。
  3. 15.9 你的是什么?

因此,结果(New_Value)应该是 18.8、13.8 和 15.9,数据类型为十进制。我无法让它工作。请指教。谢谢!

标签: sqlpatindex

解决方案


在您的示例中,这些数字都是 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 没有很好的字符串处理功能。因此,能够对您正在寻找的字符串做出这样的假设可以简化代码。


推荐阅读