VARCHAR(4)
转换为FLOAT
。由于这些字段之前没有进行任何验证,因此这些字段中的一些值可能不是数字。我的主要目标是将任何以浮点格式表示的整数
或小数
值转换并保存到新的数据库字段中。为此,我使用INSERT SELECT STATEMENT
从旧表格中选择并插入到新表格中。到目前为止,我已经写出了以下代码来进行转换:CASE WHEN LEN(LTRIM(RTRIM(hs_td2))) <> 0 AND ISNUMERIC(hs_td2) = 1 THEN CAST(LTRIM(RTRIM(hs_td2)) AS float) ELSE NULL END AS hs_td2
首先我会修剪数值,然后检查它是否是数字并将其转换为浮点数,否则设置为NULL。使用上面的代码,我在Microsoft Studio中得到以下错误消息:
Msg 8114, Level 16, State 5, Line 13
Error converting data type varchar to float.
第13行是我的SELECT
语句的开始。然后我也尝试了这个转换:
CASE WHEN LEN(LTRIM(RTRIM(hs_td2))) <> 0 AND ISNUMERIC(hs_td2) = 1 THEN CONVERT(FLOAT, LTRIM(RTRIM(hs_td2))) ELSE NULL END AS hs_td2
我也遇到了同样的错误信息。我的字段中可能包含以下内容:
10或5或-10或0.9或11.6或-11.89等等...
我想知道是否isNumeric()
是我应该使用的最佳函数,以及为什么我的代码会产生上述错误消息?
如果有人能帮忙,请告诉我。谢谢!
select cast('-11.89' as float)
执行成功。 - Dan Bracukhs_td2 NOT LIKE '%[^0-9.]%' OR '-' + hs_td2 NOT LIKE '%[^0-9.]%'
(反转条件并首先使用SELECT
查看无效值)。 这仍然不能保证转换成功(例如1.1.1
通过此方式滑过),但至少可以过滤字母数字。 - Jeroen Mostert-11.89
将无法适应varchar(4)
字段... - Hans Kesting