6

示例(不是这样工作的):

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

其中 Date 应使用参数年、月、日作为整数。为了避免语言环境的问题,我明确不想使用像“yyyy/mm/dd”或类似的字符串。

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

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

4

4 回答 4

7

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

为避免这种情况,最好的方法是将日期传递为与语言无关的YYYYMMDD. 这样它将与语言无关:

SELECT * FROM User 
WHERE LastActivity > '19800101';
于 2012-12-11T13:44:57.747 回答
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) ))
于 2012-12-11T13:48:45.597 回答
0

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

SELECT * FROM User WHERE LastActivity > '11-Dec-2012';
于 2012-12-11T15:05:14.330 回答
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)
于 2014-03-10T13:10:33.160 回答