【问题标题】:STR_TO_DATE in MY SQL Query is NullMY SQL 查询中的 STR_TO_DATE 为 Null
【发布时间】:2018-12-01 07:45:46
【问题描述】:

我已经阅读了多篇文章,发现我的语法没有任何问题,有人可以指出错误吗?

我正在一个 WordPress 数据库上测试 PHP MyAdmin 中的一些查询。我正在查询的表的 meta_key 为“Listing-End-Date”,meta_values 为“2018/06/30”。

我的查询如下所示:

SELECT * FROM `table`
WHERE `meta_key` LIKE 'Listing-End-Date'
AND STR_TO_DATE('meta_value', '%Y/%m/%d') > CURDATE()

它返回 0 个结果。为了测试我的 STR_TO_DATE 格式,我做了一个新查询:

SELECT `meta_key` , STR_TO_DATE( 'meta_value', '%Y/%m/%d' )
FROM 'table'
WHERE `meta_key` LIKE 'Listing-End-Date'

我得到了预期的 1 返回结果,但日期为 NULL。是因为我使用的是 PHP My Admin 还是我输入错误?

【问题讨论】:

    标签: mysql str-to-date


    【解决方案1】:

    Meta_value 应该打勾,而不是在 string_to_date 中引用

    【讨论】:

    • 谢谢!我知道这一定是非常明显的事情。去掉撇号(这和勾号一样吗?)解决了这个问题。似乎在我看到的所有页面、网站和示例中,他们总是忽略了对其他人来说必须显而易见的东西
    • 它可以在没有你发现的刻度的情况下工作。但是在您上面的选择中,刻度在 meta_key 周围。看到这些和listing_end_date 周围的单引号之间的区别了吗?
    【解决方案2】:

    您试图将字符串值'meta_value' 转换为显然失败的日期。您可能想从表 meta_key 中引用列 meta_value

    SELECT * FROM `table`
    WHERE meta_key LIKE 'Listing-End-Date'
    AND STR_TO_DATE(meta_value, '%Y/%m/%d') > CURDATE()
    

    我已经删除了反引号,因为这里不需要它们(除了table)。不过,即使您可以使用反引号,您也不应该使用保留关键字来命名您的表。

    另外,需要注意的一点是 meta_key LIKE 'Listening-End-Date' 等同于相等比较 meta_key = 'Listening-End-Date' 因为您不进行部分搜索(您没有在任何地方使用 %)。

    【讨论】:

    • 谢谢,确实是撇号(反引号?)。仅供参考,我的表没有命名表,但我不想分享它的实际名称。至于使用“LIKE”,我的理解是 LIKE 不区分大小写,而等号 (=) 是完全匹配的。我使用 LIKE 主要是因为我自己的胖手指……我讨厌追踪大写/小写错误。你会认为现在我只是把所有的东西都小写了。
    【解决方案3】:

    尝试使用 DATE_FORMAT()

    check this page

    【讨论】:

    • 谢谢,我去过那个页面一百次了。
    猜你喜欢
    • 2021-12-29
    • 2021-11-14
    • 2018-05-01
    • 2016-09-29
    • 1970-01-01
    • 2019-07-18
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多