【发布时间】:2019-02-01 10:05:12
【问题描述】:
我正在编写一个从 MS SQL Server 2000 到 MS SQL Server 2012 的迁移脚本,我想将 varchar 字段数据迁移到浮点数,旧数据中的一些值具有我使用下面的代码删除的非数字数据,并且它在大多数情况下都有效,除了转换失败的以下值,逻辑上 .(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)
下面的 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
【问题讨论】:
标签: sql sql-server