以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- sql中字符串转数据为什么会出错? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=143047) |
-- 作者:happyft -- 发布时间:2019/11/12 14:48:00 -- sql中字符串转数据为什么会出错? sql储存过程中写了下面的语句: UPDATE 表A SET 厚度 = CAST(厚度2 AS FLOAT) WHERE 厚度2 IS NOT NULL AND 厚度2 <> \'\'; 错误提示: "从数据类型 nvarchar 转换为 float 时出错。" 是什么原因? 谢谢! |
-- 作者:有点蓝 -- 发布时间:2019/11/12 14:52:00 -- 1、厚度2有不能转换为数字的值。 2、或者试试 UPDATE 表A SET 厚度 = case when 厚度2 is null or 厚度2 = \'\' then null else CAST(厚度2 AS FLOAT) WHERE 厚度2 IS NOT NULL AND 厚度2 <> \'\'
|
-- 作者:HappyFt -- 发布时间:2019/11/12 15:16:00 -- 那where条件中如何才能筛选掉有非数字的字符的就不用转换,比如∮18中的∮等,即只要有一个非数字的字符就不用转换, 有没有通用的写法?不用not like \'∮%\'这样每一个去判断
|
-- 作者:有点蓝 -- 发布时间:2019/11/12 15:38:00 -- 没有这种通用的用法。只能这样。 或者取出来到表格里再使用代码处理
|
-- 作者:HappyFt -- 发布时间:2019/11/12 15:58:00 -- 因为字符不确定,无法每种去判断,如果按只要有(0-9及.小数点)以外的字符就算是非数字了,这样这个where条件要怎么写? |
-- 作者:有点蓝 -- 发布时间:2019/11/12 16:22:00 -- 试试 UPDATE 表A SET 厚度 = CAST(厚度2 AS FLOAT) WHERE PATINDEX(\'%[^0-9|.|-|+]%\', 厚度2)=0 |
-- 作者:HappyFt -- 发布时间:2019/11/12 16:50:00 -- 这样可以了,谢谢! |