Foxtable(狐表)用户栏目专家坐堂 → sql中字符串转数据为什么会出错?


  共有2093人关注过本帖树形打印复制链接

主题:sql中字符串转数据为什么会出错?

帅哥哟,离线,有人找我吗?
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17116 威望:0 精华:0 注册:2014/7/29 19:09:00
sql中字符串转数据为什么会出错?  发帖心情 Post By:2019/11/12 14:48:00 [只看该作者]

sql储存过程中写了下面的语句:
UPDATE  表A SET 厚度 = CAST(厚度2 AS FLOAT) WHERE 厚度2 IS NOT NULL AND 厚度2 <> '';

错误提示:
"从数据类型 nvarchar 转换为 float 时出错。"

是什么原因?

谢谢!


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107672 积分:547681 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17116 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2019/11/12 15:16:00 [只看该作者]

那where条件中如何才能筛选掉有非数字的字符的就不用转换,比如∮18中的∮等,即只要有一个非数字的字符就不用转换,
有没有通用的写法?不用not like '∮%'这样每一个去判断

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107672 积分:547681 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/11/12 15:38:00 [只看该作者]

没有这种通用的用法。只能这样。

或者取出来到表格里再使用代码处理

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17116 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2019/11/12 15:58:00 [只看该作者]

因为字符不确定,无法每种去判断,如果按只要有(0-9及.小数点)以外的字符就算是非数字了,这样这个where条件要怎么写?

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107672 积分:547681 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/11/12 16:22:00 [只看该作者]

试试
UPDATE  表A SET 厚度 = CAST(厚度2 AS FLOAT) WHERE PATINDEX('%[^0-9|.|-|+]%', 厚度2)=0

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17116 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2019/11/12 16:50:00 [只看该作者]

这样可以了,谢谢!

 回到顶部