【问题标题】:cast from varchar to long从 varchar 转换为 long
【发布时间】:2020-11-17 19:06:27
【问题描述】:

我需要以这种方式从 varchar(100) 转换为 bigint:

select max(cast(referencia_factura as bigint))from ventas;

但我得到一个语法错误。 ¿我该如何解决? 我需要获取“referencia_factura”字段的最大值,但我需要将其转换为 bigint。

【问题讨论】:

  • 您可以通过重新排序来更好地表达您的问题。从“这就是我需要的”开始,然后包括“这就是我尝试过的”。当然,您尝试的应该包括阅读文档。我很少使用 MySQL,但通过浏览dev.mysql.com/doc/refman/5.7/en/integer-types.htmldev.mysql.com/doc/refman/5.7/en/…,我花了不到 2 分钟的时间来确定您的解决方案出了什么问题。我会走forpas推荐的路线。

标签: mysql sql casting max


【解决方案1】:

一个简单的方法是使用隐式转换:

select max(referencia_factura + 0) 
from ventas

很遗憾,MySQL 不支持直接转换为bigint

【讨论】:

    【解决方案2】:

    正如Cast Functions and Operators 中所述,MySql 不支持转换为BIGINT

    我猜referencia_factura 的值太长了,所以它们无法转换为UNSIGNED,而且像referencia_factura + 0 这样的隐式转换也会失败。

    在这种情况下,您可以做的是用0s 将列值填充到列的最大长度100,并将它们作为字符串进行比较以找到最大值,然后修剪所有前导@ 987654329@s:

    SELECT TRIM(LEADING '0' FROM MAX(LPAD(referencia_factura, 100, '0')))
    FROM ventas; 
    

    请参阅demo

    【讨论】:

    • @palanganero 很好,如果它有效,不要忘记点击复选标记接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2021-06-11
    相关资源
    最近更新 更多