尽管强制转换,但MySQL并没有将字符串转换为int

时间:2016-12-09 12:28:48

标签: mysql casting type-conversion data-conversion

所以我想做的是从日期减去星期几,简单,对吧?

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

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

我在BIRT中使用我的查询 - 因为我已经设法在BIRT表中对它进行了排序,它仍然在Workbench和BIRT图表中被破坏 - 这使它们看起来像废话。

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

  

选择案例2 = 1那么SUBSTR(mydate,1,7)ELSE CAST(WEEK(mydate,0)AS SIGNED)结束'数据'来自mytable

仍然:为什么当CAST伴随着可能返回字符串的CASE时CAST不起作用?我想有条件地让用户选择数据是按YYYY-MM(年和月)分组还是按周分组,现在看来我有点陷入困境。

1 个答案:

答案 0 :(得分:0)

由于week()函数返回CAST(WEEK(mydate, 0) AS SIGNED)中的周数,因此对我来说,(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
相关问题