以文本方式查看主题

-  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
--  
这样可以了,谢谢!