将 VARCHAR 转换为 BIGINT

Posted

技术标签:

【中文标题】将 VARCHAR 转换为 BIGINT【英文标题】:Convert VARCHAR to BIGINT 【发布时间】:2021-05-22 01:44:55 【问题描述】:

我正在尝试将具有不同数据类型的两列上的两个表连接起来。一个是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

我哪里做错了?谢谢!

【问题讨论】:

SQL 查询以SELECT 开头,所以从第一个标记开始就错了。 欢迎来到 Stack Overflow。正如@GordonLinoff 指出的那样,该声明是不完整的。此外,您将正则表达式 ( [^0-9] ) 与 SQL Like 语法(百分比字符)混合。很难知道你在这里真正想要什么(为什么不告诉我们?)但我很确定 LIKE 子句不会像你想的那样做。但至于您提出的问题:如果可能,请指出这是什么数据库(ORACLE?MSSQL?其他?)和 c.vcCompanyNo 的不同值。很可能(特别是因为 LIKE 被破坏了)你那里有非数字。 【参考方案1】:

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

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

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

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

(c.vcCompanyNo + 0)

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于将 VARCHAR 转换为 BIGINT的主要内容,如果未能解决你的问题,请参考以下文章

将 Varchar 转换为 NVarchar?

将日期(varchar)和时间(varchar)转换为日期时间Oracle

将 varchar 转换为 smallint 时出现转换错误

将文本转换为 varchar

将 VARCHAR 转换为 BIGINT

完全按原样将 Datetime 转换为 Varchar