MySQL不会将字符串转换为int,尽管它是强制转换的

MySQL不会将字符串转换为int,尽管它是强制转换的,mysql,casting,type-conversion,data-conversion,Mysql,Casting,Type Conversion,Data Conversion,所以我想做的是从日期中减去周数,很简单,对吧 然而,我相信查询会返回一个字符串,因为无论我如何对它进行排序,它仍然会按照以下顺序进行排序:0、1、10、11、12。。。19,2,21 当然,我已经在谷歌上搜索过了,我已经尝试过转换为有符号/无符号/整数/小数。我确实尝试过格式化它,乘以一,在结果上加零——什么也没发生 我在BIRT中使用我的查询——因为我已经设法在BIRT表中对其进行排序,它仍然在工作台和BIRT图表中进行筛选——这使它们看起来像废话 现在,当我写这篇文章时,我发现问题在于我有这

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

然而,我相信查询会返回一个字符串,因为无论我如何对它进行排序,它仍然会按照以下顺序进行排序:0、1、10、11、12。。。19,2,21

当然,我已经在谷歌上搜索过了,我已经尝试过转换为有符号/无符号/整数/小数。我确实尝试过格式化它,乘以一,在结果上加零——什么也没发生

我在BIRT中使用我的查询——因为我已经设法在BIRT表中对其进行排序,它仍然在工作台和BIRT图表中进行筛选——这使它们看起来像废话

现在,当我写这篇文章时,我发现问题在于我有这样的理由:

选择CASE WHEN 2=1,然后选择SUBSTR(mydate,1,7)或者CAST(WEEK(mydate,0)作为签名)作为mytable中的“数据”结束

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

对我来说,强制转换(
CAST(周(mydate,0)作为签名)
)看起来没有必要,因为函数在
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
由于函数在
INT
中返回周数,因此该强制转换(
CAST(周(mydate,0)作为签名)
)对我来说似乎没有必要。因此,您可能可以将
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等等。使用WEEK with CASE似乎没有返回number.VARCHAR类型无效。基于此:我尝试了CHAR/NCHAR,不幸的是没有happy en-因为它们返回字符串。@Marcin。啊!!错误它必须是
char
。再次查看编辑,没有帮助,仍然返回字符串。@Marcin,它将返回字符串,因为case的另一部分返回字符串,因此我通过强制转换使其成为字符串。这是我的问题,当我使用您的版本时,它会按“类似字符串”的顺序对数字进行排序,所以0、1、10等等。使用WEEK with CASE似乎没有返回number.VARCHAR类型无效。基于此:我尝试了CHAR/NCHAR,不幸的是没有happy en-因为它们返回字符串。@Marcin。啊!!错误它必须是
char
。再次查看编辑,没有帮助,仍然返回字符串。@Marcin,它将返回字符串,因为case的其他部分返回字符串,因此我通过强制转换它使其成为字符串