【问题标题】:MySQL does not convert string to int, despite casting itMySQL 不会将字符串转换为 int,尽管将其转换为
【发布时间】:2017-04-24 22:31:46
【问题描述】:

所以我想做的是从日期中减去周数,很简单,对吧?

但是,查询返回一个我相信的字符串,因为无论我如何尝试对其进行排序,它仍然按以下顺序排序:0、1、10、11、12、... 19、2、21

当然我已经用谷歌搜索过了,我已经尝试过 CAST AS SIGNED/UNSIGNED/INT/DECIMAL。我确实尝试格式化它,乘以一,结果加零 - 没有任何反应。

我在 BIRT 中使用我的查询 - 因为我已设法在 BIRT 表中对其进行排序,但它仍然在 Workbench 和 BIRT 图表中被打乱 - 这让它们看起来像无稽之谈。

现在,当我写这篇文章时,我发现问题在于我有 CASE:

SELECT CASE WHEN 2 = 1 THEN SUBSTR(mydate, 1, 7) ELSE CAST(WEEK(mydate, 0) AS SIGNED) END AS 'data' FROM mytable

仍然:为什么 CAST 与可能返回字符串的 CASE 一起使用时不起作用?我想有条件地让用户选择数据是按 YYYY-MM(年和月)还是按周分组,现在看来我有点卡住了。

【问题讨论】:

    标签: mysql casting type-conversion data-conversion


    【解决方案1】:

    该转换 (CAST(WEEK(mydate, 0) AS SIGNED)) 对我来说似乎没有必要,因为 week() 函数在 INT 中返回周数。因此,您可能可以将week() 的结果转换为varchar,因为substring 将导致varchar

    CASE WHEN 2 = 1 THEN SUBSTR(mydate, 1, 7) ELSE CAST(WEEK(mydate, 0) AS CHAR(100)) END AS data 
    FROM mytable
    

    【讨论】:

    • 那是我的问题,当我使用你的版本时,它以“类似字符串”的顺序对数字进行排序,所以 0、1、10 等等。看起来使用带有 CASE 的 WEEK 不会返回数字。
    • VARCHAR 不是有效类型。基于此:dev.mysql.com/doc/refman/5.7/en/… 我尝试使用 CHAR/NCHAR,不幸的是没有快乐 en - 因为它们返回字符串。
    • @Marcin。啊!!错误...它必须是char。再次查看编辑
    • 很遗憾,没有帮助,仍然返回字符串。
    • @Marcin,它会因为 case 的其他部分返回字符串,因此我通过转换它使其成为字符串
    猜你喜欢
    • 1970-01-01
    • 2011-10-02
    • 2011-03-06
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多