【问题标题】:SELECT all records that are 30 days old选择所有 30 天前的记录
【发布时间】:2012-02-24 15:57:16
【问题描述】:

我需要选择所有 30 天前的记录。我有下面的代码,但它不工作。在 updatestatus 中,我的日期类似于 2011 年 12 月 26 日。我创建了一个 30 天前的日期,例如

$onemonthago="01/01/2012";
$sth = $dbh->prepare(qq(
        SELECT * 
        FROM people 
        WHERE STR_TO_DATE (updatestatus,'%m/%d/%y') 
              <= STR_TO_DATE ( "$onemonthago",'%m/%d/%Y')
                    )  );

【问题讨论】:

  • 为什么不把日期保存为日期格式?
  • 嗯.. 它已经以这种方式存储了。也许你可以举一个例子说明如何做到这一点,然后给出一个查找 30 天前记录的解决方案。

标签: mysql perl


【解决方案1】:

如果时间列在时间戳中,则使用下面的查询。(使用 from_unixtime 函数)

SELECT wd.* FROM `watchdog` as wd
WHERE  from_unixtime(wd.timestamp) <= NOW() - INTERVAL 1 MONTH

【讨论】:

    【解决方案2】:

    这是我用的。很简单

    $sth = $dbh->prepare(qq(SELECT * FROM people WHERE updatestatus + INTERVAL 30 DAY <=     NOW() )) or die $DBI::errstr;
    

    【讨论】:

    • 不要这样做。将间隔添加到字段部分会禁用其上的现有索引。 MySQL 将/必须计算每个条目的间隔。
    【解决方案3】:

    如果updatestatus的数据类型是date

    SELECT * 
    FROM people 
    WHERE updatestatus <= '2012-01-01'
    

    或:

    SELECT * 
    FROM people 
    WHERE updatestatus <= CURRENT_DATE() - INTERVAL 1 MONTH
    

    如果数据类型是 datetimetimestamp 并且您也想检查时间部分:

    SELECT * 
    FROM people 
    WHERE updatestatus <= NOW() - INTERVAL 1 MONTH
    

    您可以输入确切的日期时间而不是 NOW() - INTERVAL 1 MONTH。正确的方法取决于您如何存储日期时间或时间戳(Perl 代码或 MySQL 是否首先创建它们?)。

    您也可以输入- INTERVAL 30 DAY,这会产生略有不同的结果。

    【讨论】:

    • 我得到这个错误'FUNCTION edit.CUR_DATE 不存在' 显然mysql 不能识别这个函数。你是什​​么意思..'如果updatestatus的数据类型是日期:'???我有像 2011 年 12 月 26 日这样的日期
    • 我的意思是..我的代码..正在查找过去 30 天(包括时间)的记录,这意味着.. between 不仅会检查日期,还会检查时间。例如,你今天 2 月 2 日上午 9 点运行,然后将检索 2012-01-03 09:00:00.000 和 2012-02-02 09:00:00.000 之间的所有记录
    • @ta:已更正。这是CURDATE()CURRENT_DATE()
    【解决方案4】:

    你可以试试这个方法。 SQL里面有dateadd函数,我觉得MySQL应该也有类似的函数。

    select *
    from Table
    where str_to_date between dateadd(day,-30,getdate()) and getdate()
    

    它检索当前日期和过去 30 天之间的记录。你需要调整时间。如果不计算时间,则需要去掉时间戳。

    【讨论】:

    • 嗯.. 不是 1-30 天前,而是 30 天以上。不应该有任何超过 30 天的记录,但以防万一:)
    猜你喜欢
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2012-03-22
    • 2013-12-29
    • 2021-12-19
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多