php mysql日期区间,关于php:mysql选择日期之间

我有一个名为价格的mysql表,它存储日期从和这样:

id    from          to              price

1     2013-11-25    2014-01-08      55

用户选择一个月和一年,我希望它显示该月的所有结果

因此,如果用户选择了2013年11月,2013年12月或2014年1月,则该行将包含在上面。

id    from          to              price

2     2013-10-25    2013-11-07      100

如果他们选择了2013年10月或2013年11月,则会显示上面的行,因为该行始于10月,结束于11月。

我努力了

SELECT * FROM `prices`

WHERE MONTH(prices.from)<={$_SESSION['month']}

AND MONTH(prices.to)>={$_SESSION['month']}

AND YEAR(prices.to)={$_SESSION['year']}

ORDER BY prices.from ASC

这不起作用,我不确定该怎么做

我很确定大于和小于在mysql查询中不起作用,可以使用WHERE xxx BETWEEN xxx AND xxx

什么是行不通的? 顺便说一句,您要如何处理一个选定月份返回两行价格的情况?

我想显示找到的所有价格行

我不确定如何使用BETWEEN,因为用户选择的是一个月和一年而不是几个月的范围

您可以使用STR_TO_DATE从用户选择的月份和年份创建日期,然后使用DATE_FORMAT以YYYY-MM格式放置表格的日期列,并将两者与用户插入的YYYY-MM进行比较。

我不精通php,但是这是sql中的示例(您可以在str_to_date中使用任何一天,因为您会忽略它):

SELECT * FROM `prices`

WHERE DATE_FORMAT(prices.`from`,"%Y-%m") <=

DATE_FORMAT(STR_TO_DATE('01,10,2013','%d,%m,%Y'),"%Y-%m")

AND DATE_FORMAT(prices.`to`,"%Y-%m") >=

DATE_FORMAT(STR_TO_DATE('01,10,2013','%d,%m,%Y'),"%Y-%m")

ORDER BY prices.`from` ASC

sqlfiddle demo

太棒了,正是我想要的,STR_TO_DATE格式看起来非常有用。 谢谢。

@ user1869566。 很高兴它帮助了:)

请遵循以下方法:

SELECT * from prices

WHERE str_to_date('{$_SESSION['month']}-{$_SESSION['year']}','%b-%Y') BETWEEN date(prices.from) AND date(prices.to)

您可能只想在str_to_date中使用正确的格式,当前它会转换以下格式= 2013年10月

检查其他格式:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

尝试改用" BETWEEN"。

例:

SELECT * FROM `prices` WHERE MONTH(`from`) BETWEEN '10' AND '12' AND YEAR(`to`)='2013'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值