首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否将结果与今天的日期进行比较?

是否将结果与今天的日期进行比较?
EN

Stack Overflow用户
提问于 2012-05-01 16:47:26
回答 11查看 363.5K关注 0票数 76

有没有一种方法可以使用SQL中的Now()函数来选择包含今天日期的值?

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

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-05-01 17:16:13

SQL Server中没有原生Now()函数,因此您应该使用:

代码语言:javascript
运行
复制
select GETDATE() --2012-05-01 10:14:13.403

您可以通过执行以下操作来分别获取日、月和年:

代码语言:javascript
运行
复制
select DAY(getdate())  --1
select month(getdate())  --5
select year(getdate()) --2012

如果您使用的是sql server 2008,则存在仅包含日期部分而不包含时间的日期日期时间:

代码语言:javascript
运行
复制
select cast (GETDATE() as DATE) --2012-05-01
票数 85
EN

Stack Overflow用户

发布于 2012-05-01 16:50:42

好的,让我们做好这件事。选择与今天匹配的日期,使用索引(如果可用),并显示所有不同的日期/时间类型。

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

对于纯date类型,我们可以与今天的date进行简单的比较。

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

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

首先,使用DATE

代码语言:javascript
运行
复制
select * from dates 
where dte = CAST(CURRENT_TIMESTAMP AS DATE)
;

现在使用DATETIME:

代码语言:javascript
运行
复制
select * from datetimes 
where dtm >= CAST(CURRENT_TIMESTAMP AS DATE)
and dtm < DATEADD(DD, 1, CAST(CURRENT_TIMESTAMP AS DATE))
;

最后,使用DATETIME2:

代码语言:javascript
运行
复制
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)

使用日期:

代码语言:javascript
运行
复制
select * from dates 
where dte = cast(now() as date)
;

使用DATETIME:

代码语言:javascript
运行
复制
select * from datetimes 
where dtm >= cast((now()) as date)
and dtm < cast((now() + interval 1 day) as date)
;

PostgreSQL: (SQL Fiddle | db<>fiddle)

使用日期:

代码语言:javascript
运行
复制
select * from dates 
where dte = current_date
;

使用不带时区的时间戳:

代码语言:javascript
运行
复制
select * from timestamps
where ts >= 'today'
and ts < 'tomorrow'
;

甲骨文: (SQL Fiddle)

使用日期:

代码语言:javascript
运行
复制
select to_char(dte, 'YYYY-MM-DD HH24:MI:SS') dte
from dates 
where dte >= trunc(current_date)
and dte < trunc(current_date) + 1
;

使用时间戳:

代码语言:javascript
运行
复制
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)

使用日期字符串:

代码语言:javascript
运行
复制
select * from dates 
where dte = (select date('now'))
;

使用日期和时间字符串:

代码语言:javascript
运行
复制
select dtm from datetimes
where dtm >= datetime(date('now'))
and dtm < datetime(date('now', '+1 day'))
;

使用unix时间戳:

代码语言:javascript
运行
复制
select datetime(dtm, 'unixepoch', 'localtime') from datetimes
where dtm >= strftime('%s', date('now'))
and dtm < strftime('%s', date('now', '+1 day'))
;
票数 107
EN

Stack Overflow用户

发布于 2012-05-01 16:55:59

不知道你在问什么!

然而,

代码语言:javascript
运行
复制
SELECT  GETDATE()

将为您提供当前日期和时间

代码语言:javascript
运行
复制
SELECT  DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

将只显示时间设置为00:00:00的日期

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10395459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档