gpt4 book ai didi

sql - 将结果与今天的日期进行比较?

转载 作者:行者123 更新时间:2023-12-01 17:29:16 25 4
gpt4 key购买 nike

有没有办法在 SQL 中使用 Now() 函数来选择今天日期的值?

我的印象是 Now() 会包含时间和日期,但今天的日期会将时间设置为 00:00:00,因此这永远不会匹配?

最佳答案

好的,让我们正确执行此操作。选择与今天匹配的日期,使用索引(如果可用),并显示所有不同的日期/时间类型。

这里的原理在每种情况下都是相同的。我们抓取日期列位于最近午夜(今天的日期时间为 00:00:00)或之后以及下一个午夜之前(明天的日期时间为 00:00:00,但不包括具有该确切值的任何内容)的行)。

对于纯日期类型,我们可以和今天的日期做一个简单的比较。

为了让事情变得又好又快,我们明确避免对数据库中存储的日期进行任何操作(下面所有示例中 where 子句的 LHS)。这可能会触发全表扫描,因为每次比较都必须计算日期。 (此行为似乎因 DBMS、YMMV 而异)。

MS SQL Server: ( SQL Fiddle | db<>fiddle )

首先,使用 DATE

select * from dates 
where dte = CAST(CURRENT_TIMESTAMP AS DATE)
;

现在使用日期时间:

select * from datetimes 
where dtm >= CAST(CURRENT_TIMESTAMP AS DATE)
and dtm < DATEADD(DD, 1, CAST(CURRENT_TIMESTAMP AS DATE))
;

最后是 DATETIME2:

select * from datetimes2
where dtm2 >= CAST(CURRENT_TIMESTAMP AS DATE)
and dtm2 < DATEADD(DD, 1, CAST(CURRENT_TIMESTAMP AS DATE))
;
<小时/>

MySQL: ( SQL Fiddle | db<>fiddle )

使用日期:

select * from dates 
where dte = cast(now() as date)
;

使用日期时间:

select * from datetimes 
where dtm >= cast((now()) as date)
and dtm < cast((now() + interval 1 day) as date)
;
<小时/>

PostgreSQL: ( SQL Fiddle | db<>fiddle )

使用日期:

select * from dates 
where dte = current_date
;

使用不带时区的时间戳:

select * from timestamps
where ts >= 'today'
and ts < 'tomorrow'
;
<小时/>

甲骨文: ( SQL Fiddle )

使用日期:

select to_char(dte, 'YYYY-MM-DD HH24:MI:SS') dte
from dates
where dte >= trunc(current_date)
and dte < trunc(current_date) + 1
;

使用时间戳:

select to_char(ts, 'YYYY-MM-DD HH24:MI:SS') ts
from timestamps
where ts >= trunc(current_date)
and ts < trunc(current_date) + 1
;
<小时/>

SQLite: ( SQL Fiddle )

使用日期字符串:

select * from dates 
where dte = (select date('now'))
;

使用日期和时间字符串:

select dtm from datetimes
where dtm >= datetime(date('now'))
and dtm < datetime(date('now', '+1 day'))
;

使用unix时间戳:

select datetime(dtm, 'unixepoch', 'localtime') from datetimes
where dtm >= strftime('%s', date('now'))
and dtm < strftime('%s', date('now', '+1 day'))
;
<小时/>

Backup of SQL Fiddle code

关于sql - 将结果与今天的日期进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10395459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com