问题描述
我正在尝试将具有不同数据类型的两列上的两个表连接起来。一种是 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]'
应该可以解决问题。