从字符串值中提取数字值

时间:2020-08-26 19:11:33

标签: sql sql-server

我需要从字符串值中提取数字值,然后将该值转换为十进制类型。我需要从该字段中减去另一个值。我的查询是:

  SELECT TOP (1000) 
          
          substring([Expected Charges],(PATINDEX('%[123456789]%',[Expected Charges])),9) as 'Expected Charges',
          [Expected Charges] as 'Expected Charges 2'            
     
  FROM [AX_2C_Prod_DW].[dbo].[AAATRANSPORTTABLE_V]

我的输出是:

Expected Charges    Expected Charges 2
9991                TOTAL CHARGES: 000000009991
9991                TOTAL CHARGES: 000000009991

我需要以下输出:

Expected Charges    Expected Charges 2
99.91               TOTAL CHARGES: 000000009991
99.91               TOTAL CHARGES: 000000009991

我尝试将convert函数添加到我的查询中:

  SELECT TOP (1000) 
          
          convert(decimal(18,2),substring([Expected Charges],(PATINDEX('%[123456789]%',[Expected Charges])),9)) as 'Expected Charges',
          [Expected Charges] as 'Expected Charges 2'
     
  FROM [AX_2C_Prod_DW].[dbo].[AAATRANSPORTTABLE_V]

但它产生了以下结果:

Expected Charges    Expected Charges 2
9991.00             TOTAL CHARGES: 000000009991
9991.00             TOTAL CHARGES: 000000009991

2 个答案:

答案 0 :(得分:2)

LEFT(substring([Expected Charges],(PATINDEX('%[123456789]%',[Expected Charges])),9),LEN(substring([Expected Charges],(PATINDEX('%[123456789]%',[Expected Charges])),9))-2)+'.'+RIGHT(substring([Expected Charges],(PATINDEX('%[123456789]%',[Expected Charges])),9),2) as 'Expected Charges'

答案 1 :(得分:1)

除非我缺少任何东西,否则我认为您可以做到

cast(cast(replace(col,'TOTAL CHARGES:','') as decimal(10,2))/100 as decimal (10,2))
相关问题