【问题标题】:Select records from current month从当月选择记录
【发布时间】:2011-09-15 08:45:00
【问题描述】:

我有一个表,其中有一个名为 slldatevarchar 字段。此字段包含以下格式的日期:
2010-08-30
(YYYY-MM-DD)

现在我想使用 mysql 查询选择包含当前月份的记录。

有人吗?

【问题讨论】:

    标签: php mysql date


    【解决方案1】:

    当您使用字符字段而不是日期字段时,您必须转换值,然后使用正常的日期函数。喜欢

    SELECT * FROM table WHERE MONTH(CAST(slidate as date)) = MONTH(NOW()) AND YEAR(CAST(slidate as date)) = YEAR(NOW())
    

    【讨论】:

    • 谢谢,我可以将 char 字段转换为日期字段而不会丢失记录吗?如果我将字段转换为日期字段,select 语句会是什么样子?
    • 这实际上也会选择前几年,不确定是否是首选。
    • Wesley van Opdorp,添加 YEAR(NOW()) 会有所帮助
    • 您只需要添加年份,更新答案以反映这一点。
    • @dreni:如果你真的只有有效的日期,它应该可以工作。先复制表试试看。
    【解决方案2】:

    试试这个:

    SELECT * FROM table_name WHERE MONTH(slldate) = date('m') AND YEAR(slldate) = date('Y');

    【讨论】:

    • Rufinus,如果我将 varchar 字段转换为日期字段,这会起作用吗?
    【解决方案3】:

    我有一个表,其中包含一个名为 slldate 的 varchar 字段。该字段包含日期

    然后您应该将其更改为日期字段。你(应该)知道这是正确的做法。

    以下方法适用于您的 varchar 字符串 - 但可以针对日期进行一些简化。

    请注意,由于您的日期字符串已经是 big-endian,因此您不需要强制转换它们并失去索引优化的好处:

     SELECT *
     FROM yourtable
     WHERE slldate >= CONCAT(DATE_FORMAT('%Y-%m-', NOW()),'01')
     AND slldate < CONCAT(DATE_FORMAT('%Y-%m-', NOW() + INTERVAL 1 MONTH), '01')
    

    【讨论】:

      【解决方案4】:

      SELECT * FROM table_name WHERE YEAR(savedate) = YEAR(CURDATE()) AND MONTH(savedate) = MONTH(CURDATE())

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多