如何创建用于查询的硬编码日期参数?

时间:2012-12-11 13:40:25

标签: sql sql-server date ssms

示例(不是这样工作):

SELECT * FROM User 
WHERE LastActivity > Date(1980,1,1)

其中Date应使用参数year,month,day作为整数。为了避免语言环境的麻烦,我明确地不想使用类似" yyyy / mm / dd"的字符串。或类似的。

如果这很重要,我正在使用MSSQL数据库上的Microsoft SQL Server Management Studio。

注意:我确信这是微不足道的,但我找不到使用谷歌或SO的解决方案。

4 个答案:

答案 0 :(得分:6)

  

为了避免语言环境的麻烦,我明确地不想使用   像“yyyy / mm / dd”或类似的字符串。

为了避免这种情况,最好的方法是将日期作为语言中性传递,如YYYYMMDD。这样它将独立于语言:

SELECT * FROM User 
WHERE LastActivity > '19800101';

答案 1 :(得分:2)

使用ISO date format

yyyymmdd
SELECT * FROM User 
WHERE LastActivity > CONVERT(DATE, (CONVERT(VARCHAR(4), @Year) + 
                                    RIGHT('0' + CONVERT(VARCHAR(2), @Month),2) + 
                                    RIGHT('0' + CONVERT(VARCHAR(2), @Date),2) ))

答案 2 :(得分:0)

我一直发现大多数数据库都接受'dd-mmm-yyyy'作为日期参数,我几乎在任何地方都使用它。有些人没有(例如MS / Access),但有SQL / Server。这种格式被广泛接受,但显然您可能需要使其特定于语言。

SELECT * FROM User WHERE LastActivity > '11-Dec-2012';

答案 3 :(得分:0)

我认为'转换'功能可以满足您的需求。要制作1980年3月20日,请执行以下操作:

Convert(date, '1980-03-20')

您的确切查询将是:

SELECT * FROM User 
WHERE LastActivity > Convert(date, '1980-01-01')

如果您使用的是SQL Server 2012及更高版本,则可以使用更简单的DATEFROMPARTS函数:

SELECT * FROM User 
WHERE LastActivity > DATEFROMPARTS(1980,01,01)