我有两个表,其中列[date]
的类型为DATETIME2(0)
。
我需要仅通过它们的日期部分(日+月+年),而不考虑时间部分(小时+分钟+秒)来比较两个记录。
我该如何做到这一点?
我有两个表,其中列[date]
的类型为DATETIME2(0)
。
我需要仅通过它们的日期部分(日+月+年),而不考虑时间部分(小时+分钟+秒)来比较两个记录。
我该如何做到这一点?
在SQL Server 2008中使用CAST
将数据类型转换为新的DATE
数据类型,以仅比较日期部分:
IF CAST(DateField1 AS DATE) = CAST(DateField2 AS DATE)
Marc的回答中有一个小缺陷,即两个日期字段都被强制转换为类型,这意味着您将无法利用任何索引。
因此,如果需要编写可以从日期字段的索引中获益的查询,则需要使用以下(相当复杂的)方法:
(DF1 >= CAST(DF2 AS DATE)) AND (DF1 < DATEADD(dd, 1, CAST(DF2 AS DATE)))
PS:在SQL Server的旧版本中提取日期的另一种方法是使用内部表示日期的技巧。
CAST(FLOOR(CAST(DF2 AS FLOAT)) AS DATETIME)
ymd
或 y-m-d
。--112 is ISO format 'YYYYMMDD'
declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
select
*
from
Sales.Orders
where
CONVERT(char(8), OrderDate, 112) = @filterDate
DATETIME
,并将时间设置为午夜。因为:
因此,假设您只关心日期,并将数据存储为该日期。上述查询可以简化为:当SQL Server将文字转换为过滤列的类型时,如果没有指定时间部分,则假定为午夜。如果要使此类过滤器返回指定日期的所有行,则需要确保将所有值都存储为午夜。
--112 is ISO format 'YYYYMMDD'
declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
select
*
from
Sales.Orders
where
OrderDate = @filterDate
CONVERT(DATE, GETDATE()) = CONVERT(DATE,'2017-11-16 21:57:20.000')
我通过以下代码测试了 MS SQL 2014
select case when CONVERT(DATE, GETDATE()) = CONVERT(DATE,'2017-11-16 21:57:20.000') then 'ok'
else '' end
DateDiff
并按天进行比较。DateDiff(dd,@date1,@date2) > 0
这意味着 @date2 > @date1
例如:
select DateDiff(dd, '01/01/2021 10:20:00', '02/01/2021 10:20:00')
结果为:1
如何比较两个日期,格式为MM/DD/YYYY和MM/DD/YYYY。 首先,字段的列类型必须是dateTime。 例如:columnName:payment_date dataType:DateTime。
之后,您可以轻松地进行比较。 查询语句为:
select * from demo_date where date >= '3/1/2015' and date <= '3/31/2015'.
这很简单...... 我测试过了.....