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

Sql 将结果与今天的日期进行比较?,sql,sql-server,current-time,Sql,Sql Server,Current Time,有没有一种方法可以使用SQL中的Now函数选择具有今天日期的值 我的印象是现在将包含时间和日期,但今天的日期将时间设置为00:00:00,因此这将永远不会匹配?好的,让我们正确地执行此操作。选择与今天匹配的日期,使用索引(如果可用),并显示所有不同的日期/时间类型 这里的原理在每种情况下都是一样的。我们抓取日期列位于最近的午夜(今天的日期,时间为00:00:00)或之后的行,以及下一个午夜(明天的日期,时间为00:00:00)之前的行,但不包括任何具有该精确值的行 对于纯日期类型,我们可以与今天

有没有一种方法可以使用SQL中的Now函数选择具有今天日期的值


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

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

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

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

为了使事情保持良好和快速,在下面的所有示例中,我们明确避免对存储在where子句的DB-LHS中的日期进行任何操作。这可能会触发全表扫描,因为每次比较都必须计算日期。这种行为似乎因DBMS、YMMV而异

MS SQL Server:|

首先,使用日期

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))
;
select * from datetimes 
where dtm >= cast((now()) as date)
and dtm < cast((now() + interval 1 day) as date)
;
使用日期时间:

select * from datetimes 
where dtm >= CAST(CURRENT_TIMESTAMP AS DATE)
and dtm < DATEADD(DD, 1, CAST(CURRENT_TIMESTAMP AS DATE))
;
select * from datetimes 
where dtm >= cast((now()) as date)
and dtm < cast((now() + interval 1 day) as date)
;
使用不带时区的时间戳:

select * from timestamps
where ts >= 'today'
and ts < 'tomorrow'
;
使用日期和时间字符串:

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'))
;

不确定你到底想做什么,但听起来GETDATE就是你想要的。GETDATE返回一个datetime,但如果您对时间组件不感兴趣,则可以强制转换为日期

SELECT  GETDATE()
SELECT  CAST(GETDATE() AS DATE)

只需将日期的时间元素归零即可。e、 g

SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

我已经使用了GetDate,因为它是一个MSSQL函数,正如您所标记的,但是现在可能是MySQL或者您正在使用ODBC函数调用,如果您只是用一个替换另一个,仍然应该可以工作

不知道你在问什么

然而

SELECT  GETDATE()
将为您提供当前日期和时间

SELECT  DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

在前面的答案的基础上,您将得到时间设置为00:00:00的日期,请注意一个要点,您还需要操作表列,以确保它不包含datetime数据类型的时间片段

下面是一个演示上述内容的小示例脚本:

select getdate()
--2012-05-01 12:06:51.413
select cast(getdate() as date)
--2012-05-01

--we're using sysobjects for the example
create table test (id int)
select * from sysobjects where cast(crdate as date) = cast(getdate() as date)
--resultset contains only objects created today
drop table test
我希望这有帮助

编辑: 下面是@dwurf的评论,感谢上面的例子对性能的影响,我想提出以下建议。 我们创建了一个日期范围,从今天午夜开始到一天的最后一毫秒,SQL server的计数达到.997,这就是我减少3毫秒的原因。通过这种方式,我们可以避免操纵左侧并避免性能影响

select getdate()
--2012-05-01 12:06:51.413
select dateadd(millisecond, -3, cast(cast(getdate()+1 as date) as datetime))
--2012-05-01 23:59:59.997
select cast(getdate() as date)
--2012-05-01

create table test (id int)
select * from sysobjects where crdate between cast(getdate() as date) and dateadd(millisecond, -3, cast(cast(getdate()+1 as date) as datetime))
--resultset contains only objects created today
drop table test

如果您有一个只存储了日期和时间的表,并且希望现在就获取这些数据,则可以执行以下操作:

SELECT * FROM tbl WHERE DATEDIFF(d, yourdate, GETDATE())=0

这将产生日差为0的行,因此今天是。

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

你可以试试这个sql代码

   SELECT [column_1], [column_1], ...    
    FROM (your_table)
     where date_format(record_date, '%e%c%Y') = date_format(now(), '%e%c%Y') 
您可以尝试:

WHERE created_date BETWEEN CURRENT_TIMESTAMP-180 AND CURRENT_TIMESTAMP
这对我很有用:

从datecolumn\u date=curdate的表中选择*
对于我来说,如果我想与DrawDate进行比较,正在运行的查询是:

CAST(DrawDate AS DATE) = CAST (GETDATE() as DATE)
这是将结果与今天的日期进行比较

或整个查询:

SELECT TOP (1000) *
FROM test
where DrawName != 'NULL' and CAST(DrawDate AS DATE) = CAST (GETDATE() as DATE)
order by id desc

请张贴您的表格结构。表中的日期值是否包含时间成分?请发布您想要的结果。可能的重复并不总是最好的做法。如果表中有一百万个日期,这将很快破坏执行计划。使用CONVERTVARCHAR比较日期不是最好的方法。最好将日期保留为日期,例如将CASTCURRENT_时间戳保留为日期或DATEADDDAY,0,DATEDIFFDAY,0,CURRENT_时间戳。我实际上是在追求SQL server?:第一个示例是针对SQL Server的。快乐查询:Now是一个ODBC函数,因此可以在MSSQL中使用select调用{fn Now}列_date这里是属性名吗?d是什么,yourdate在这里是什么?@bobthebuilder这是您的列或变量包含日期
WHERE created_date BETWEEN CURRENT_TIMESTAMP-180 AND CURRENT_TIMESTAMP
CAST(DrawDate AS DATE) = CAST (GETDATE() as DATE)
SELECT TOP (1000) *
FROM test
where DrawName != 'NULL' and CAST(DrawDate AS DATE) = CAST (GETDATE() as DATE)
order by id desc