甲骨文日期范围

发布于 2024-08-17 13:33:07 字数 273 浏览 7 评论 0原文

使用 Oracle 10g db 我有一个类似这样的表:

 create table x(
 ID NUMBER(10) primary key,
 wedding DATE NOT NULL
 );

我怎么

 select * from x where wedding is in june 2008???

知道它可能是一个简单的表,但到目前为止我找不到任何令人满意的答案。 非常感谢您的帮助。

using a Oracle 10g db I have a table something like this:

 create table x(
 ID NUMBER(10) primary key,
 wedding DATE NOT NULL
 );

how can I

 select * from x where wedding is in june 2008???

I know it is probably an easy one but I couldn't find any satisfying answer so far.
Help is very much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红ご颜醉 2024-08-24 13:33:07

使用:

SELECT *
  FROM x
 WHERE x.wedding BETWEEN TO_DATE('2008-JUN-01', 'YYYY-MON-DD') 
                            AND TO_DATE('2008-JUL-01', 'YYYY-MON-DD')

使用 TO_DATE 构造一个时间部分为 00:00:00 的日期,这要求结束日期提前一天,除非您想使用逻辑将当前日期更正为 1午夜前的第二次。未经测试:

TO_DATE('2008-JUN-30', 'YYYY-MON-DD') + 1 - (1/(24*60*60))

应该在 2008 年 6 月 30 日基础上添加一天,然后减去一秒,以返回最终日期 2008 年 6 月 30 日 23:59

参考文献:

Use:

SELECT *
  FROM x
 WHERE x.wedding BETWEEN TO_DATE('2008-JUN-01', 'YYYY-MON-DD') 
                            AND TO_DATE('2008-JUL-01', 'YYYY-MON-DD')

Use of TO_DATE constructs a date with a time portion of 00:00:00, which requires the end date to be one day ahead unless you want to use logic to correct the current date to be one second before midnight. Untested:

TO_DATE('2008-JUN-30', 'YYYY-MON-DD') + 1 - (1/(24*60*60))

That should add one day to 30-Jun-2008, and then subtract one second in order to return a final date of 30-Jun-2008 23:59.

References:

濫情▎り 2024-08-24 13:33:07

这是 ANSI SQL,从版本 9i 开始受到 Oracle 支持

SELECT *
FROM   x
WHERE  EXTRACT(YEAR  FROM wedding) = 2008
AND    EXTRACT(MONTH FROM wedding) =   06

具有 Oracle 特定 TO_CHAR() 的经典解决方案:(

SELECT *
FROM   x
WHERE  TO_CHAR(wedding, 'YYYY-MMM') = '2008-JUN'

当恐龙还在地球上行走时,支持后一种解决方案)

This is ANSI SQL, and supported by oracle as of version 9i

SELECT *
FROM   x
WHERE  EXTRACT(YEAR  FROM wedding) = 2008
AND    EXTRACT(MONTH FROM wedding) =   06

Classic solution with oracle specific TO_CHAR():

SELECT *
FROM   x
WHERE  TO_CHAR(wedding, 'YYYY-MMM') = '2008-JUN'

(the latter solutions was supported when dinosaurs still walked the earth)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文