【问题标题】:MySQL FORMAT_DATE %d returning '0'MySQL FORMAT_DATE %d 返回 '0'
【发布时间】:2012-03-14 19:25:20
【问题描述】:

我在使用 MySQL format_date 时遇到问题,不明白为什么。我的代码中有以下内容:

date_format(NOW() + INTERVAL 3 DAY, '%Y-%m-%d') 

这似乎工作正常,除了无论我选择什么日期,%d 都以单个零 ('0') 的形式返回。如果我将 %d 更改为 %e ,我可以获得正确的日期,但我使用它来比较日期,所以对于 10 以下的数字,我需要前导零。这是数据库设置,还是我遗漏了一些明显的东西?

提前致谢。

更新:我觉得它必须在数据库中,因为当我将查询简化为:

$q = "SELECT date_format(NOW() + INTERVAL 3 DAY, '%Y-%m-%d') as 'today' from content_field_date LIMIT 1";

“今天”打印为“2012-03-0”

同时,这个:

$q = "SELECT date_format(NOW() + INTERVAL 3 DAY, '%Y-%m-%e') as 'today' from content_field_date LIMIT 1";

正确返回“2012-03-17”

泽思

【问题讨论】:

  • 奇怪。如果我运行SELECT date_format(NOW() + INTERVAL 3 DAY, '%Y-%m-%d'),它会正确显示。我想知道这是否与您的语言环境有关?
  • 你能显示完整的查询吗?这不应该发生。
  • 这里也没有显示0。如果您的目标是比较日期,您也可以在 mysql 中进行。
  • 奇怪。如果您输入其他数字,例如+ INTERVAL 17 DAY,是否也会发生这种情况?
  • (与错误无关):as 'today' 应该是as todayas `today`

标签: mysql date format


【解决方案1】:

我今天遇到了同样的问题,根据您的“content_field_date”表名,我假设正在使用 Drupal。可以在这里找到答案:

Some sql queries work in terminal but not with db_query() function in Drupal 6 Why..?

这里: http://drupal.org/node/100846

因为百分号需要转义,所以正确的查询应该是:

$q = "SELECT date_format(NOW() + INTERVAL 3 DAY, '%%Y-%%m-%%d') as 'today' from content_field_date LIMIT 1";

【讨论】:

    【解决方案2】:

    你所描述的不应该发生。你要么发现了一个 MySQL 错误,要么你做错了什么。

    如果您只想比较日期,您可以在 MySQL 中执行此操作,您可能根本不应该使用 DATE_FORMAT()。您可以使用它来获取日期:

    DATE(NOW() + INTERVAL 3 DAY)
    

    或:

    (CURDATE() + INTERVAL 3 DAY)
    

    【讨论】:

    • 我将当前日期与数据库中格式为“YYYY-MM-DD”的字段进行比较,因此需要格式化,除非我遗漏了什么?
    • 列是CHAR 并且是这样格式化的还是DATE 列?
    • 在任何一种情况下,column < CURDATE() + INTERVAL 3 DAY 都应该可以正常工作。但是使用DATE 类型来存储日期。否则,您可能会在其中获得2011-17-48 之类的数据。甚至2011-AA-0B。或者其他什么。
    • 从来没有发现为什么 %d 不起作用,但是一起删除 DATE_FORMAT 似乎让我得到了想要的结果。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    相关资源
    最近更新 更多