【问题标题】:Database check condition with day,month,year columns带有日、月、年列的数据库检查条件
【发布时间】:2017-05-12 02:29:10
【问题描述】:

我的表格包含前三列日、月、年。我将它分开而不是单列日期,因为该表包含有关订阅分析的信息。因此,通过保持分离,我可以每天分析数据。现在我有想重置一些数据的情况。像我想重置日期、月份、年份在日期 2008-01-01 和 2010-10-01 之间的数据的示例。那么如何在 mysql 查询中为分隔的日、月和年列设置 where 条件呢?

【问题讨论】:

  • 请在您的问题中添加您正在使用的SQL形式的标签,例如MySQLSQL-Server等。
  • 将日期/日期和时间存储为单个实体

标签: mysql sql conditional-statements


【解决方案1】:

请尝试以下...

WHERE STR_TO_DATE( CONCAT( yearValue,
                           '-',
                           monthValue,
                           '-',
                           dayValue ) ) BETWEEN '2008-01-01' AND 
                           '2010-10-01'

该子句使用CONCAT() 函数来形成一个正在检查的日期的字符串表示形式,然后使用STR_TO_DATE() 函数将该字符串转换为DATE 值,然后将该值与指定的范围进行比较。

如果您有任何问题或cmets,请随时发表相应的评论。

进一步阅读

https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_between(在 MySQL 的 BETWEEN 运算符上)

https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat(在 MySQL 的 CONCAT() 函数上)

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date(在 MySQL 的 STR_TO_DATE() 函数上)

【讨论】:

    【解决方案2】:

    您确实应该将该值存储为日期。但你仍然可以做你想做的事。这是一种方法:

    where year * 10000 + month * 100 + day between 20080101 and 20101001
    

    请注意,值都是整数。日期会更好,因为查询可以利用索引。

    【讨论】:

    • 戈登林诺夫谢谢。你的答案很好。多谢。我也知道约会会很好。
    【解决方案3】:

    您可以使用TO_CHAR 函数连接您的三个INT 列。使用TO_DATE 将其转换为日期,然后进行比较。

    WHERE TO_DATE(TO_CHAR(year || month || day), 'yyyymmdd') BETWEEN '20080101' AND '20100101'; 
    

    【讨论】:

    • alejandrohiron 谢谢。你的答案是对的,但我使用的是没有 TO_DATE 函数的 mysql
    • 别担心!当我回答问题时,该问题没有 RDBMS 标签。
    • 也可以使用MySQL函数STR_TO_DATE()。更多信息在这里:sqlines.com/oracle-to-mysql/to_date
    猜你喜欢
    • 2016-11-28
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2011-09-11
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多