针对日期列的 Oracle SQL Where 子句

发布于 2024-09-30 12:01:24 字数 263 浏览 3 评论 0原文

我有一个包含日期的 DATE 列,但我需要查询它以查找不到 30 天的记录。

START_DATE
----------
01-AUG-2010
09-AUG-2010
22-AUG-2010
09-SEP-2010

查询:

SELECT START_DATE
 WHERE START_DATE < 30;

我知道这是 ORACLE SQL 中的简单查询,但我做错了。

I have a DATE column with a date in it but I need to query it to find records less than 30 days old.

START_DATE
----------
01-AUG-2010
09-AUG-2010
22-AUG-2010
09-SEP-2010

Query:

SELECT START_DATE
 WHERE START_DATE < 30;

I know it is simple Query in ORACLE SQL but i am doing something wrong.

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

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

发布评论

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

评论(3

捎一片雪花 2024-10-07 12:01:24

使用:

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > SYSDATE - 30
  • SYSDATE是Oracle获取当前日期和时间的语法
  • 在Oracle中,您可以在天的上下文中进行日期算术,因此SYSDATE - 30表示“当前日期,减去三十天”以获得一个过去 30 天的日期

如果要根据截至午夜的 30 天计算日期,请使用 TRUNC 函数

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > TRUNC(SYSDATE) - 30

不要在列上运行 TRUNC - 这将使列上的索引变得无用,从而确保表扫描。

Use:

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > SYSDATE - 30
  • SYSDATE is Oracle's syntax to get the current date and time
  • In Oracle, you can do date arithmetic in the context of days, so SYSDATE - 30 means "current date, subtract thirty days" to get a date that is thirty days in the past

If you want to evaluate the date based on thirty days as of midnight, use the TRUNC function:

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > TRUNC(SYSDATE) - 30

Don't run TRUNC on the column - that will render an index on the column useless, ensuring a table scan.

彡翼 2024-10-07 12:01:24
SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > SYSDATE - INTERVAL '30' DAY;

尽管我注意到 Oracle 和 PostgreSQL 之间的 INTERVAL 语法存在一些细微差别,但 INTERVAL 比假设您可以添加或减去天数更可移植。

SELECT t.start_date
  FROM YOUR_TABLE t
 WHERE t.start_date > SYSDATE - INTERVAL '30' DAY;

INTERVAL is more portable than assuming that you can add or subtract days, although I've noticed some slight differences in the INTERVAL syntax between Oracle and PostgreSQL.

黒涩兲箜 2024-10-07 12:01:24

哪里 START_DATE > SYSDATE - 1

或者

WHERE TRIM(STARTDATE) >修剪(系统日期)- 1

WHERE START_DATE > SYSDATE - 1

or perhaps

WHERE TRIM(STARTDATE) > TRIM(SYSDATE) - 1

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