SQL 服务器作业日期输出与 SSIS 调试中的输出不同 运行
SQL Server Job date output different than output in SSIS debug run
所以我们有一个 SQL 作业,它将数据转换为 CSV 文件中的特定日期输出。这总是完美的。最近我们迁移到另一个SQL服务器,现在问题是这样的,用于将日期和时间转换为我们需要的特定格式的查询如下:
SET DATEFORMAT DMY;
DECLARE @Date as Date
SET @Date = ?
SELECT [SeqNr] + 100000 as 'SeqNr'
,CONVERT(VARCHAR,[Start_DateTime],104) + ' ' + CONVERT(VARCHAR,[Start_DateTime],108) as 'Start_DateTime'
,CONVERT(VARCHAR,[Answered_DateTime],104) + ' ' + CONVERT(VARCHAR,[Answered_DateTime],108) as 'Answered_DateTime'
,CONVERT(VARCHAR,[Term_DateTime],104) + ' ' + CONVERT(VARCHAR,[Term_DateTime],108) as 'Term_DateTime'
,[End_Status]
,'' as 'End_Status2'
,'' as 'ReasonCode'
FROM [RAW_DATAVAULT].[dbo].[H100S1_zendeskChat]
WHERE [EndDate] IS NULL AND CAST([Start_DateTime] as Date) = @Date
ORDER BY [Start_DateTime]
如果你 运行 这个并查看 CSV,一行的格式是:
372278;01.07.2020 04:25:02;01.07.2020 04:36:36;01.07.2020 05:26:59;Answered;;
但是,运行 相同的包通过 SQL 服务器代理作业,结果是这样的:
372278;07.01.2020 04:25:02;07.0.2020 04:36:36;01.07.2020 05:26:59;Answered;;`
而且我不明白为什么它会切换日月?语言环境是 1043(荷兰语),查询甚至指定将 DMY 设置为日期格式,所有这一切都不重要,因为转换是字符串。
那么SQL服务器中的什么设置是错误的,它改变了输出?即使更改 SQL 服务器 language/time 设置也没关系。
我有点不知所措。
通过使用FORMAT()
函数,它将独立于任何服务器设置。
SQL
DECLARE @Start_DateTime DATETIME = GETDATE();
SELECT @Start_DateTime AS [Before]
, FORMAT(@Start_DateTime, 'dd.MM.yyyy HH:mm:ss') AS [After]
Output on my machine
+-------------------------+---------------------+
| Before | After |
+-------------------------+---------------------+
| 2020-07-09 08:16:54.023 | 09.07.2020 08:16:54 |
+-------------------------+---------------------+
所以我们有一个 SQL 作业,它将数据转换为 CSV 文件中的特定日期输出。这总是完美的。最近我们迁移到另一个SQL服务器,现在问题是这样的,用于将日期和时间转换为我们需要的特定格式的查询如下:
SET DATEFORMAT DMY;
DECLARE @Date as Date
SET @Date = ?
SELECT [SeqNr] + 100000 as 'SeqNr'
,CONVERT(VARCHAR,[Start_DateTime],104) + ' ' + CONVERT(VARCHAR,[Start_DateTime],108) as 'Start_DateTime'
,CONVERT(VARCHAR,[Answered_DateTime],104) + ' ' + CONVERT(VARCHAR,[Answered_DateTime],108) as 'Answered_DateTime'
,CONVERT(VARCHAR,[Term_DateTime],104) + ' ' + CONVERT(VARCHAR,[Term_DateTime],108) as 'Term_DateTime'
,[End_Status]
,'' as 'End_Status2'
,'' as 'ReasonCode'
FROM [RAW_DATAVAULT].[dbo].[H100S1_zendeskChat]
WHERE [EndDate] IS NULL AND CAST([Start_DateTime] as Date) = @Date
ORDER BY [Start_DateTime]
如果你 运行 这个并查看 CSV,一行的格式是:
372278;01.07.2020 04:25:02;01.07.2020 04:36:36;01.07.2020 05:26:59;Answered;;
但是,运行 相同的包通过 SQL 服务器代理作业,结果是这样的:
372278;07.01.2020 04:25:02;07.0.2020 04:36:36;01.07.2020 05:26:59;Answered;;`
而且我不明白为什么它会切换日月?语言环境是 1043(荷兰语),查询甚至指定将 DMY 设置为日期格式,所有这一切都不重要,因为转换是字符串。
那么SQL服务器中的什么设置是错误的,它改变了输出?即使更改 SQL 服务器 language/time 设置也没关系。
我有点不知所措。
通过使用FORMAT()
函数,它将独立于任何服务器设置。
SQL
DECLARE @Start_DateTime DATETIME = GETDATE();
SELECT @Start_DateTime AS [Before]
, FORMAT(@Start_DateTime, 'dd.MM.yyyy HH:mm:ss') AS [After]
Output on my machine
+-------------------------+---------------------+
| Before | After |
+-------------------------+---------------------+
| 2020-07-09 08:16:54.023 | 09.07.2020 08:16:54 |
+-------------------------+---------------------+