我正在使用旅行软件,我必须检索特定日期的酒店房价。酒店日期是在三个月(2015年1月9日至2015年12月31日)之间添加的。我的数据库有两列开始日期和结束日期都是varchar类型。日期格式是mm / dd / yyyy。我必须检索单个日期的值(11/25/2015)。目前我正在使用的查询是
SELECT *
FROM tbl_roomtype
where `room_id`='17'
and roomoccupancy='Double'
AND startdate<='11/25/2015'
and enddate >='11/25/2015'
查询效果不佳。所以任何人都可以提出解决方案。
答案 0 :(得分:2)
您需要使用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')
答案 1 :(得分:1)
您必须将字符串解析为有效日期。要进行过滤,您必须使用“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')