在方案+ MS SQL Server中从字符串中删除非数字字符失败

时间:2014-03-04 18:09:50

标签: sql sql-server

我正在编写从MS SQL server 2000到MS SQL Server 2012的迁移脚本,我想将varchar字段数据迁移到float,旧数据中的一些值具有非数字数据,我使用下面的代码删除了它在大多数情况下工作,除了转换失败的逻辑以下值。(DOT)是有效值但由于多个.DOT失败。

我想忽略转换失败的值,但没有发现忽略它。

列值

  

1.2.4

     

5..4

     

.. 7.5.3

SELECT Left(SubString(field, PatIndex('%[0-9.-]%', field), 8000), 
                        PatIndex('%[^0-9.-]%', SubString(field, PatIndex('%[0-9.-]%', field), 8000) + 'X')-1)

After Suppress下面是最终代码,工作正常

CASE WHEN (len(field) - len(replace(field, '.', '')) <= 1 AND field!='.' ) THEN
CAST(ISNULL(REPLACE(REPLACE(LEFT(SubString(field, PatIndex('%[0-9.-]%', field), 8000), 
                PatIndex('%[^0-9.-]%', SubString(field, PatIndex('%[0-9.-]%', field), 8000) + 'X')-1) ,'-',''),'..','.'),'')
                as float)
END                

1 个答案:

答案 0 :(得分:1)

计算点数,如果&gt;则抑制(NULL) 1

select case 
   when len(field) - len(replace(field, '.', '')) > 1 then null 
   else Left(..) end

或在where子句中:

where len(field) - len(replace(field, '.', '')) <= 1