2016-03-15 152 views
6

我想创建一个报告,从今天交货日期的SQL Server数据库获取记录。如何比较只有日期部分今天交货日期

我已经试过

select * from (tablename) 
where delivery_date = getdate() 

虽然这并没有给我任何错误,也没有给我任何记录无论是。

我猜想这是因为所有的日期是这样的:

2016-03-15 00:00:00.000 

也许,我需要截断日期删除时间戳,然后尝试?

+0

您可以将'getdate()'强制转换为'日期' - 这会切断时间。或者使用日期范围,如果'delivery_date'存储也可能包含时间(如果是这样,我建议使用这种方法,而不是将两边都转换为'date')。 –

回答

11

你可以尝试查询像下面

select * from (tablename) 
where CAST(delivery_date as date) = CAST(getdate() as date) 

此外,如果所有的交付日期还有时间部分像00:00:00.000肯定然后

select * from (tablename) 
where delivery_date = CAST(getdate() as date) 

将工作一样好。

+1

如果所有交货日期都没有时间部分,那么也应考虑将列类型更改为DATE以节省一些空间。 –

+0

非常感谢Dhruv。我试过这个代码,它的工作。 Badi Mehrbaani aapki。再次感谢你。 – user1777929

+0

@ user1777929您的评论使我的一天:) – DhruvJoshi

3

如果DELIVERY_DATE总是午夜(00:00:00.000),那么这样的比较吧:

select * from (tablename) 
where delivery_date = datediff(d, 0, getdate()) 

使用datediff这样是截断datetime值的时间部分的快捷方式。

0

哟需要删除delivery_date字段的时间部分和GETDATE()值。

SELECT * 
FROM (tablename) 
WHERE DATEADD(dd, DATEDIFF(dd, 0, delivery_date), 0) = DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0) 
1

我只是创建2个参数。一个用于StartTime,另一个用于EndTime并在我的查询中使用它们。

DECLARE @StartTime DATETIME, 
     @EndTime DATETIME 

SET @StartTime = DATEDIFF(d,0,GETDATE()) 
SET @EndTime = DATEADD(d,1,@StartTime) 

SELECT * 
FROM [tablename] 
WHERE delivery_date >= @StartTime 
     AND delivery_date < @EndTime 
0

试试这个:

DECLARE @Today DATETIME SET @如今= CONVERT(日期,GETDATE())

SELECT * FROM(表名) 其中DELIVERY_DATE = @Today

相关问题