DATEPART没有像我认为的那样工作

时间:2010-10-09 18:27:11

标签: sql sql-server

select * 
  from Advertisements 
 where DepartureDate < DATEPART('dd.mm.yy', '09.10.2010');

但是我得到了

Msg 1023,Level 15,State 1,Line 1 为datepart指定的参数1无效。

plsql中的这个非常简单,这里很复杂...... 有人能告诉我,我怎样才能得到比今天更小的所有日期。

5 个答案:

答案 0 :(得分:1)

您似乎将DATEPARTFORMAT_DATE混淆(无论如何都不存在)。

DATEPART提取日期的某些部分。恰好是一部分。

比今天小的日期是< dbo.CropTime(getdate()),其中CropTime是一个可以用不同方式编写的函数(例如this question中描述的那些)。

或者,如果您使用的是SQL Server 2008,它就像< cast(getdate() as date)一样简单。

答案 1 :(得分:1)

您可以使用它来获取当前日期:

CONVERT(date, GETDATE())

请参阅documentation

  

有人能告诉我,我怎样才能得到比今天更小的所有日期。

SELECT * 
FROM Advertisements 
WHERE DepartureDate < CONVERT(date, GETDATE())

答案 2 :(得分:1)

该代码真的可以在PL / SQL中运行吗? T-SQL函数中的DATEPART用于提取日期的各个部分。

这将在此之前为您提供所有日期。

select * from Advertisements where DepartureDate < getdate()

如果您计划对日期进行硬编码(如示例代码所示),您只需要以SQL Server理解的方式进行格式化。例如

select * from Advertisements where DepartureDate < '2010-10-09'

我被告知日期格式适用于每台服务器,无论其本地化设置如何。它肯定适用于我尝试过的每台服务器 - 但我很高兴被推翻: - )

答案 3 :(得分:1)

DatePart用于获取日期的组成部分,例如月,年或日。要获得比现在更小(更旧)的日期,我会这样做。

select * from Advertisements where DepartureDate < GetDate();

如果我想要在昨天或之前离开日期,我可以这样做。

select * from Advertisements where DepartureDate < Convert(DateTime,Convert(Char(10),GetDate(),121));

select * from Advertisements where DepartureDate < Convert(DateTime,floor(convert(int,GetDate())))

答案 4 :(得分:1)

我想要的是

select * 
from Advertisements 
where DepartureDate < Convert(Date, '09.10.2010', 102)

或可能

SELECT *
FROM Advertisements
WHERE DepartureDate < Cast(CURRENT_TIMESTAMP as date)