有没有一种方法可以使用SQL中的Now()函数来选择包含今天日期的值?
我的印象是Now()将包含时间和日期,但今天的日期将时间设置为00:00:00,因此这永远不会匹配?
发布于 2012-05-01 17:16:13
SQL Server中没有原生Now()函数,因此您应该使用:
select GETDATE() --2012-05-01 10:14:13.403您可以通过执行以下操作来分别获取日、月和年:
select DAY(getdate())  --1
select month(getdate())  --5
select year(getdate()) --2012如果您使用的是sql server 2008,则存在仅包含日期部分而不包含时间的日期日期时间:
select cast (GETDATE() as DATE) --2012-05-01发布于 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
select * from dates 
where dte = CAST(CURRENT_TIMESTAMP AS DATE)
;现在使用DATETIME:
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)
;使用DATETIME:
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'))
;发布于 2012-05-01 16:55:59
不知道你在问什么!
然而,
SELECT  GETDATE()将为您提供当前日期和时间
SELECT  DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))将只显示时间设置为00:00:00的日期
https://stackoverflow.com/questions/10395459
复制相似问题