gpt4 book ai didi

sql - 如何停止 SQL Server 交换月份和日期?

转载 作者:行者123 更新时间:2023-12-01 09:41:40 27 4
gpt4 key购买 nike

我有以下疑问:

DECLARE @someDateTime DATETIME = '2019-12-01 00:00:00.000'; -- 1st December 2019
SELECT @someDateTime;

结果

2019-01-12 00:00:00.000

我预计结果是 2019-12-01 00:00:00.000(2019 年 12 月 1st ) - 由于某种未知原因,月份和日期互换.

直到最近,我从未对这种格式有任何疑问。

如何以“YYYY-MM-DD HH:mm:ss.000”格式输入日期,并让它在分配给变量/显示在选择中后保持该格式?
什么设置决定了这种可能已经改变的格式?

可能有用的信息

dbcc useroptions

结果:

Set Option | Value
---------- -----
...
language | British
dateformat | dmy
...

Server Properties

我尝试过的事情:

查询 1

将日期更改为如果交换将无效的内容

DECLARE @someDateTime DATETIME = '2019-12-20 00:00:00.000';
SELECT @someDateTime;

结果:

Msg 242, Level 16, State 3, Line 4
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

查询 2

变量声明后设置

DECLARE @someDateTime DATETIME;
SET @someDateTime = '2019-12-01 00:00:00.000';
SELECT @someDateTime;

结果 - 不理想:

2019-01-12 00:00:00.000

查询 3

将变量插入到表变量中

DECLARE @someDateTime DATETIME = '2019-12-01 00:00:00.000';
DECLARE @someTable TABLE (someDateTimeColumn DATETIME);
INSERT @someTable VALUES (@someDateTime);
SELECT * FROM @someTable

结果 - 不理想:

someDateTimeColumn
------------------
2019-01-12 00:00:00.000

查询 4

将数据直接插入到表变量中

DECLARE @someTable TABLE (someDateTimeColumn DATETIME);
INSERT @someTable VALUES ('2019-12-01 00:00:00.000');
SELECT * FROM @someTable

结果:不理想

someDateTimeColumn
------------------
2019-01-12 00:00:00.000

查询 5

更改输入字符串的格式

DECLARE @someDateTime DATETIME = '01/12/2019';
SELECT @someDateTime;

结果 - 期望的

2019-12-01 00:00:00.000

查询 6

更改输入字符串的格式

DECLARE @someDateTime DATETIME = '2019-12-01T00:00:00.00';
SELECT @someDateTime;

结果 - 期望:

2019-12-01 00:00:00.000

查询 7

更改输入字符串的格式

DECLARE @someDateTime DATETIME = '2019-12-01';
SELECT @someDateTime;

结果 - 不理想:

2019-01-12 00:00:00.000

查询 8

使用 SET DATEFORMAT

SET DATEFORMAT ymd
DECLARE @someDateTime DATETIME = '2019-12-01';
SELECT @someDateTime;

结果 - 期望的

2019-12-01 00:00:00.000

最佳答案

您可以使用文字格式 YYYYMMDD,无论您的 SQL Server 的区域设置如何,它总是被解释为年-月-日:

DECLARE @someDateTime DATETIME = '20191201 00:00:00.000';

关于sql - 如何停止 SQL Server 交换月份和日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59626028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com