【问题标题】:Get Value of a date from mysql php从mysql php获取日期的值
【发布时间】:2015-11-10 13:52:21
【问题描述】:

我正在使用旅行软件,我必须检索特定日期的酒店价格。酒店日期是在三个月(2015 年 9 月 1 日至 2015 年 12 月 31 日)之间添加的。我的数据库有两列开始日期和结束日期都是 varchar 类型。日期格式是 mm/dd/yyyy。我必须检索单个日期的值(2015 年 11 月 25 日)。目前我使用的查询是

SELECT * 
FROM tbl_roomtype 
where `room_id`='17' 
  and roomoccupancy='Double' 
  AND startdate<='11/25/2015' 
  and enddate >='11/25/2015'

查询不完美。所以任何人都可以提出解决方案。

【问题讨论】:

  • 您不是在比较日期,而是在比较 字符串。这会给你不同的结果。当您将日期存储为字符串时会发生这种情况。现在您需要首先将它们转换为日期,然后进行比较。
  • “查询无法正常运行” 什么... 那么,它是否有效?它会在某些时候弄错日期吗?
  • 由于您比较字符串,您最好将格式更改为 2015/11/25 然后 '2015/10/31' &lt; '2015/11/25' TRUE 而不是 '31/10/2015' &lt; '25/11/2015' FALSE :-)
  • 看看MySQL Date Literals。您可以将 2015 年 11 月 25 日格式化为 201511252015-11-25 以及多种其他方式。这使得 MySQL 将值视为日期,而不是字符串。
  • @EdGibbs 一旦格式正确,对于这个目的,它是否被视为日期或字符串都无关紧要!

标签: php mysql date datetime


【解决方案1】:

您需要使用 str_to_date (str_to_date)。 试试这个:

SELECT * 
FROM tbl_roomtype 
where `room_id`='17' 
  and roomoccupancy='Double' 
  AND STR_TO_DATE(startdate,'%m/%d/%Y')<=STR_TO_DATE('11/25/2015' ,'%m/%d/%Y')
  and STR_TO_DATE(enddate,'%m/%d/%Y') >=STR_TO_DATE('11/25/2015' ,'%m/%d/%Y')

【讨论】:

  • 感谢您的帮助,先生
【解决方案2】:

您必须将字符串解析为有效日期。要进行过滤,您必须使用 'YYYY-MM-DD' 格式的字符串。

SELECT
    *
FROM
    `tbl_roomtype`
WHERE
    `room_id` = '17' 
    AND `roomoccupancy` = 'Double' 
    AND STR_TO_DATE(`startdate`, '%m/%d/%Y') <= '2015-11-25' 
    AND STR_TO_DATE(`enddate`, '%m/%d/%Y') >= '2015-11-25'

或者(如果你不能修复你的过滤器:

SELECT
    *
FROM
    `tbl_roomtype`
WHERE
    `room_id` = '17' 
    AND `roomoccupancy` = 'Double' 
    AND STR_TO_DATE(`startdate`, '%m/%d/%Y') <= STR_TO_DATE('11/25/2015', '%m/%d/%Y') 
    AND STR_TO_DATE(`enddate`, '%m/%d/%Y') >= STR_TO_DATE('11/25/2015', '%m/%d/%Y')

【讨论】:

    猜你喜欢
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2015-06-21
    相关资源
    最近更新 更多