【问题标题】:Truncated incorrect INTEGER value casting not working MYSQL截断不正确的 INTEGER 值转换不起作用 MYSQL
【发布时间】:2015-06-24 23:53:38
【问题描述】:

当我执行下面的代码时,我在 MYSQL 中收到了截断不正确的 INTEGER 值错误。我知道逻辑没有多大意义,并且会改变,我对错误更加一致。我已尝试强制转换整个 case 语句,但仍然收到相同的错误消息。

这是原文

选择 (计数(当 v.SalesDate = v.SalesDate 然后 v.Surname 结束时的情况))作为 x
来自 finaljoinalldata v 按日期分组(v.SalesDate) 按日期排序(v.SalesDate);

我也试过了

选择 (计数(CAST(当 v.SalesDate = v.SalesDate 然后 v.Surname 结束)AS SIGNED))作为 x
来自 finaljoinalldata v 按日期分组(v.SalesDate) 按日期排序(v.SalesDate);

任何帮助将不胜感激。 谢谢

【问题讨论】:

  • 列的数据类型是什么,你能给出一些产生错误的示例数据吗?
  • 是的,SalesDate 只是一个日期,而姓氏是一个字符串
  • 我删除了 group by 子句它仍然无法工作 select ( count(case when v.SalesDate = v.SalesDate then v.Surname end) ) as x from finaljoinalldata v

标签: mysql casting case typeconverter truncated


【解决方案1】:

你的说法没有道理。为什么你有case 条件呢?这是多余的——除非您专门检查 NULL 值。

这应该可行:

select count(v.Surname) as x
from finaljoinalldata v
group by date(v.SalesDate)
order by date(v.SalesDate);

当我看到group by 并且group by 列不在select 中时,我很怀疑。

【讨论】:

  • 逻辑不止于此,它还有第二个子选择和一个连接。我不关心逻辑,因为在完整查询中我仍然遇到相同的错误,并且我已将其缩小到语句( count(case when v.SalesDate = v.SalesDate then v.Surname end) )为 x , case 语句本身运行良好,但只要将计数添加到它就会引发错误。让我知道这是有道理的。
  • 我删除了 group by 子句它仍然无法工作 select ( count(case when v.SalesDate = v.SalesDate then v.Surname end) ) as x from finaljoinalldata v
  • 如果您想查看我尝试运行的整个查询,请执行以下操作:选择日期(v.SalesDate),计数(当 v.SalesDate = vv.minva 然后 v.Surname 结束时) as num_new_users, (count(distinct v.Surname) - count(case when v.SalesDate = vv.minva then v.Surname end) ) as num_repeat_users from finaljoinalldata v join (select t.Surname, min(SalesDate) as minva from finaljoinalldata t group by Surname ) vv on v.Surname = vv.Surname group by date(v.SalesDate) order by date(v.SalesDate);
  • @driveinmotors 。 . .这些问题没有意义。如果将count() 替换为sum(case when . . . then 1 else 0 end) 会发生什么。
猜你喜欢
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多