【问题标题】:Generate Monthly XML from a table containing date range从包含日期范围的表生成每月 XML
【发布时间】:2013-07-07 23:42:58
【问题描述】:

我有一张桌子 -

test_table(booking_id, booking_description, start_date, end_date)

样本数据 -

1 | Some booking | 06/30/2013 | 08/01/2013
2 | Some new one | 08/05/2013 | 09/01/2013
3 | Some new two | 09/03/2013 | 09/05/2013

现在我想使用一些 java 代码生成一个每月的 xml 文件(没问题,我会写),我会将月份和年份(基本上是月份的开始和结束日期)传递给 mysql 查询和我想要一些表作为 -

月 = 7,2013 年

1 | Some booking | 07/01/2013
1 | Some booking | 07/02/2013
...

月 = 9,年 = 2013

2 | Some new one | 09/01/2013
  |              | 09/02/2013
3 | Some new two | 09/03/2013
...

我希望使用从开始日期到结束日期的 java 循环并查询 mysql 以找出该日期是否在日期范围内,如果出现,我会添加详细信息,否则我会添加空白。但这将是一种可怕的方法(将进行 30 次 mysql 查找),我认为它是最后的选择。

有没有其他方法可以通过一两个mysql查询并获取格式的数据。

编辑:

month = 7, year = 2013

Select * 
from booking_details 
where  month(start_date) <= 7 and year(start_date) <= 2013 and 
month(end_date) >= 7 and year(end_date) >= 2013

我开发了这个查询,但仍然不确定它是否适用于所有可能的场景。

【问题讨论】:

  • 您要对照您传入的月份/年份、start_date 或 end_date,或两者检查哪一列?
  • 只有当日期位于表中的某个日期范围内时才应获取数据,否则不会为该日期选择任何数据。
  • 您要检查 2 个日期范围吗?因此,如果您在 2013 年 7 月通过,您想查看开始日期或结束日期是否在 2013 年 7 月 1 日和 2013 年 7 月 31 日之间?
  • 是的,我的意思是说,如果我过了 7/2013,它应该通过检查表中所有预订的开始和结束日期来获取本月的所有预订。

标签: mysql database date-range


【解决方案1】:

根据我对您想要的问题的理解:

declare @date datetime
Select booking_id, booking_description, start_date --you don't indicate which date field you want in the results
from test_table
where (start_date between @date and date_add(@date, INTERVAL 1 MONTH))
or (end_date between @date and date_add(@date, INTERVAL 1 MONTH))

SQL 可能不准确,我知道 TSQL 不是 MySQL,但这应该很接近。

【讨论】:

  • 谢谢BlackICE,你看,如果开始日期是上个月,结束日期是下个月,它会跳过这个场景。例如。 start_date = 2013 年 6 月 23 日和 end_date = 2013 年 8 月 4 日。现在,如果我正在查找 2013 年 7 月的数据,查询将失败。
  • 啊,好吧,事情复杂了,我会考虑的。
  • 嘿,我在我的问题编辑中开发了 som 查询,你能交叉验证它,它会工作吗?我无法找出所有场景。
猜你喜欢
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 2017-03-22
  • 2014-09-07
  • 2023-01-12
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
相关资源
最近更新 更多