Sql server 使用变量vs varchar在datepart中产生不同的结果

Sql server 使用变量vs varchar在datepart中产生不同的结果,sql-server,Sql Server,此查询: SET datefirst 7 DECLARE @data datetime = '2020-01-03 00:00:00.000' SELECT DATEPART(WEEK, @data) SET datefirst 7 SELECT DATEPART(WEEK, '2020-01-03 00:00:00.000') 返回1(正确) 但是,此查询: SET datefirst 7 DECLARE @data datetime = '2020-01-03 00:00:00.00

此查询:

SET datefirst 7
DECLARE @data datetime = '2020-01-03 00:00:00.000'

SELECT DATEPART(WEEK, @data)
SET datefirst 7

SELECT DATEPART(WEEK, '2020-01-03 00:00:00.000')
返回
1
(正确)

但是,此查询:

SET datefirst 7
DECLARE @data datetime = '2020-01-03 00:00:00.000'

SELECT DATEPART(WEEK, @data)
SET datefirst 7

SELECT DATEPART(WEEK, '2020-01-03 00:00:00.000')
返回不正确的
2


我在这里遗漏了什么?

对数据使用明确的格式,您会得到一致的结果
yyyy-MM-dd-hh:MM:ss.mmm在SQL Server中不是明确的,只有
yyy-MM-ddThh:MM:ss(.nnnnnnn)
yyyyymmdd
与数据类型和语言无关

以下两种方法都返回1:

set datefirst 7
DECLARE @data datetime = '2020-01-03T00:00:00.000'

select DATEPART(week,@data)
GO

set datefirst 7
select DATEPART(week,'2020-01-03T00:00:00.000')