【问题标题】:DATE() type field shows as 0000-00-00 in JOIN queryDATE() 类型字段在 JOIN 查询中显示为 0000-00-00
【发布时间】:2018-01-26 19:59:02
【问题描述】:

在执行 JOIN 查询时,MySQL 为 DATE() 类型字段输出 0000-00-00,尽管在执行简单 SELECT(2017-03-02 等)时值不为空。

SELECT * FROM t1
JOIN t1_t2 ON t1_t2.t1_id = t1.t1_id
JOIN t2 ON t1_t2.t2_id = t2.t2_id
WHERE t1_id = 52
ORDER BY t2.type, t1.my_date_field;

奇怪的是,当我将 DATE_FORMAT(my_date_field) 添加到查询中时,它可以工作:

SELECT *, DATE_FORMAT(`my_date_field`, "%Y-%m-%d")
(...)

我做了一个 SQLFiddle http://sqlfiddle.com/#!9/23a965/8 但无法复制问题

编辑问题来自 ORDER BY 子句,删除 'ORDER BY release_date' “解决”了问题 - 但仍然无法在小提琴上复制。

【问题讨论】:

  • 去掉记号
  • 我强烈建议创建一个sqlfiddle。它将帮助我们诊断您的问题。
  • @Ctznkane525 版本中没有打勾不工作,到底应该怎么改结果?
  • SQL fiddle 会有所帮助
  • @Ctznkane525 sqlfiddle.com/#!9/23a965/8 查看编辑后的帖子了解更多信息

标签: mysql date join null format


【解决方案1】:

考虑到您的问题听起来像是 mysql 错误,我有两个选项供您尝试。

选项 1

SELECT *, DATE_FORMAT(alb.release_date, "%Y-%m-%d")
FROM artist art
JOIN track_artist_album taa  ON taa.artist_id = art.id
JOIN album alb ON alb.id = taa.album_id
JOIN track tra ON tra.id = taa.track_id
WHERE art.id = 1
ORDER BY tra.name, DATE_FORMAT(alb.release_date, "%Y-%m-%d");

选项 2:

SELECT * FROM 
(
SELECT art.id as art_id, art.name as art_name, 
  alb.id as alb_id, alb.name as album_name, tra.id as tra_id, tra.name as tra_name, DATE_FORMAT(alb.release_date, "%Y-%m-%d") fmt_release_date
FROM artist art
JOIN track_artist_album taa  ON taa.artist_id = art.id
JOIN album alb ON alb.id = taa.album_id
JOIN track tra ON tra.id = taa.track_id
WHERE art.id = 1
) A
ORDER BY a.tra_name, a.fmt_release_date

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2014-05-22
    • 2014-10-10
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多