【问题标题】:Getting values in between ordinary date and timestamp from mysql database从mysql数据库获取普通日期和时间戳之间的值
【发布时间】:2011-11-15 06:53:05
【问题描述】:

我有一个标准的 mysql 时间戳,格式为 2011-11-14 20:06:24 。每当将新记录添加到名为 Lead 的表中时,都会添加此时间戳。

我有两个输入字段供用户以 dd/mm/yyyy 格式输入日期和日期。一旦用户输入两个日期并按下按钮,这些值将被传递到其他字段,以从表格前导获取插入时间范围之间的记录。

我尝试了以下查询,但它不起作用

SELECT  DATE_FORMAT(added_on, '%d/%m/%Y') as date
FROM    lead
WHERE   added_on BETWEEN "10/11/2011" AND "14/11/2011"

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    对日期、日期时间和时间戳使用标准格式:'2011-11-14' 而不是 '14/11/2011'

    使用单引号,而不是双引号。

    如果added_on 是时间戳,则不应使用BETWEEN,否则您将丢失最后一天的几乎所有记录,因为'2011-11-14' 将转换为'2011-11-14 00:00:00'。改用这个:

    WHERE   added_on >= '2011-11-10'
      AND   added_on <  '2011-11-15'              --- note the "< the next day"
    

    WHERE   added_on >=  '2011-11-10'
      AND   added_on <  ('2011-11-14' + INTERVAL 1 DAY)
    

    您应该仔细阅读 MySQL docs: TIMESTAMP properties 页面,了解如何在 MySQL 中处理(以及自动插入、更新)时间戳以及 MySQL docs: Timezone support

    【讨论】:

    • 感谢您及时回复 ypercube。我按照你的建议试过了。我今天插入了一行(20011-11-15),但它没有返回任何结果。从潜在客户中选择 * WHERE added_on >= '2011-11-10' AND added_on
    • 你必须使用 next day... added_on &lt; '2011-11-16'
    • = was missing 我试过 select * from lead WHERE added_on >= '2011-10-15' AND added_on
    • 感谢 yepercube 的详细解释。我可以将给定月份范围内添加的记录数按月份存储在单独的变量中吗?
    【解决方案2】:

    你必须先在php中转换日期

    你可以使用php的“date”函数根据mysql转换日期格式,如下:

    $converteddate =  date('Y-m-d',strtotime($yourposteddate));
    

    这将以格式返回日期,例如2011-08-15 可以被mysql理解,然后在mysql中正常使用。

    【讨论】:

    • yeppercube 的回答对 Arfeen 很有帮助。上面的方法相当有效。
    【解决方案3】:
    SELECT  DATE_FORMAT(added_on, '%m/%d/%Y') as date
    FROM    lead
    WHERE   added_on BETWEEN DATE_FORMAT("20/11/2011",'%m/%d/%Y')
    AND     DATE_FORMAT("21/11/2011", '%m/%d/%Y');
    

    【讨论】:

    • 这是在数据库中进行搜索的错误方法。没有索引可以使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2021-09-26
    • 1970-01-01
    • 2012-08-20
    • 2015-09-04
    • 2014-01-09
    • 2017-12-01
    相关资源
    最近更新 更多