【问题标题】:How to compare date with a date range如何将日期与日期范围进行比较
【发布时间】:2011-07-30 18:11:28
【问题描述】:

我想计算总量和按 CarID 分组,但目前无法执行此操作。

在我的数据库中有一些表:TBL_CAR_TX、TBL_CAR、TBL_PERSON

table: TBL_CAR_TX
------------------
select * from TBL_CAR_TX
where TranDate >= '2011-06-09' and Trandate <= '2011-06-20'

    TranID, AccID, CarID, TranDate, Type, Quantity, .....
    --------------------------------------------------------
    0      2563    BMW    2011-06-09   H    -15 (1)
    1      2563    BMW    2011-06-20   R     15
    2      2563    BMW    2011-06-20   H     20
    3      0055    TOY    2011-06-12   H    -10 (2)
    4      0055    TOY    2011-06-20   R     10

...

(H):保持,(R):释放
如果我们改变 WHERE stmt 的条件:

select * from TBL_CAR_TX where TranDate >= '2011-06-10' and Trandate <= '2011-06-19'  

(这些日期,我从外面得到的) ==>所有记录都消失了==>我无法计算,因为数据不显示。

查看表 TBL_CAR_TX,我们可以看到一个人从 '2011-06-09' 借了汽车'BMW',直到 '2011-06-20' 他还了车。因此,如果我在 SQL Server 2008 中执行此操作,如何将记录 (1) 和 (2) 保留在从 '2011-06-10' 到 '2011-06-19' 的日期范围内进行计算。如果不能,我该如何在java编程中做到这一点?任何建议。

table TBL_CAR:

    MarketID, CarID, Name, Size, ...
    ---------------------------
    GER       BMW    ....
    JPA       TOY    ....

Table TBL_PERSON:

    AccID, Name, Age, DOB, ...
    -------------------------
    2563   Robert
    0055   Mike

非常感谢您的帮助

【问题讨论】:

  • 你需要搜索日期比较函数(我猜一个叫BETWEEN,但我这辈子用过一次MSSQL,但有些SQL实现有)

标签: java sql-server sql-server-2008


【解决方案1】:

我想计算总数量和按 CarID 分组,但目前无法执行此操作。 所以如果我在 SQL Server 2008 中做,我怎样才能将记录 (1) & (2) 保存在 从 '2011-06-10' 到 '2011-06-19' 的范围日期来计算。

只需从您的 SQL 中删除 =

select CarID, SUM(QUANTITY) from TBL_CAR_TX where TranDate > '2011-06-09' and Trandate < '2011-06-20' GROUP BY CarID

或使用BETWEEN SQL CLAUSE。

select CarID, SUM(QUANTITY) from TBL_CAR_TX where TranDate BETWEEN '2011-06-10' AND '2011-06-19' GROUP BY CarID

如果不能,我怎么在java编程中做到呢?

您绝对可以在 java 中过滤掉数据,但是当 SQL 可以为您完成工作时,这样做是没有意义的。除非它是一个巨大的性能损失,否则几乎总是值得在 SQL 中进行这样的处理。

【讨论】:

  • 哇。我猜到了 ;) AFAIK BETWEEN 版本应该优化得更好。
  • 感谢您的帮助,但我已经尝试过但没有记录显示
  • @Bryan - 你粘贴了正确的数据吗?你也得到一个SQL错误吗?可能是 TranDate 未定义为表中的 DATE 字段。你能检查一下表架构吗?
  • @naugtur - 很好的猜测。除非我们可以看到 2 条 sql 提取了多少页,否则很难判断哪一个优化得更好。我知道在 DB2 的情况下 > 和
  • @bryan - 它有效。您必须以不正确的格式或其他方式提供日期
猜你喜欢
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
相关资源
最近更新 更多