【问题标题】:Check if dayname of the date is in the dayname column data检查日期的日期名称是否在日期名称列数据中
【发布时间】:2020-05-18 19:54:22
【问题描述】:

我正在尝试获取 where 子句条件来检查 dayname 是否在列数据列表中。 例如,如果今天是星期一,并且数据库列有“星期一,星期二”,则返回 True。

ID | Days               | Action
1  | 'Monday', 'Tuesday'| Task1
2  | 'Sunday', 'Friday' | Task3

我想知道今天是不是星期一,然后返回任务 1。

SELECT * FROM test_table t where DAYNAME(NOW()) in (t.days)

上面的语句不能得到结果。

【问题讨论】:

  • 列中有一个逗号分隔的值列表几乎总是表明数据库设计不佳。

标签: mysql date mysql-error-1064 sql-date-functions


【解决方案1】:

我不建议您使用逗号分隔的列表在数据库中存储多个值。正确的做法是对数据进行规范化,并将每个值放入 related 表中的单独记录中。

但是你的问题的字面解决方案是使用FIND_IN_SET() MySQL 函数。如果 str 不在 strlist 中,则返回值索引(从 1 开始)或 0。
下一个困难是您存储用单引号括起来的值。因此,在 WHERE 子句中,您必须像

一样对其进行转义
... WHERE FIND_IN_SET('\'Monday\'', Days)

再一次,我建议你改用normalize your data

【讨论】:

    猜你喜欢
    • 2014-09-19
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多