我正在编写从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
答案 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