微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 VARCHAR 转换为 BIGINT

如何解决将 VARCHAR 转换为 BIGINT

我正在尝试将具有不同数据类型的两列上的两个表连接起来。一种是 varchar,一种是 bigint。执行查询时,我收到一条错误消息“将数据类型 varchar 转换为 bigint 时出错。

CASE WHEN c.vcCompanyNo NOT LIKE '%[^0-9]%' 
     THEN CAST (c.vcCompanyNo AS BIGINT)
     ELSE 0
     END
FROM Client c
LEFT JOIN Nzbn n ON c.vcCompanyNo=n.sourceRegisterUniqueIdentifier
WHERE c.daTerminationDate IS NULL

我哪里做错了?谢谢!

解决方法

在 MySQL 中,您可以使用 regexp 代替 like。对于所有数字:

(CASE WHEN c.vcCompanyNo REGEXP '^[0-9]+$' 
      THEN CAST(c.vcCompanyNo AS UNSIGNED)
      ELSE 0
 END)

请注意,MySQL 不支持 BIGINT 中的 CAST(为什么?我不知道)。

MySQL 还支持无错误的隐式转换。所以这可能更简单地做你想做的事:

(c.vcCompanyNo + 0)

这会将前导数字转换为数字值。如果第一个字符不是数字,则返回 0

,

like 运算符不支持正则表达式,仅支持 _% 运算符。

您需要 rlike 运算符。您似乎也在进行双重否定(not like[^...])。 rlike '[0-9]' 应该可以解决问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。