2

使用select * from table,datetime列返回值2019-02-28 20:11:38.980

没有select * from TableName where CreatedOn = '2019-28-02 20:11:38.980'错误(受影响的 1 行)

withselect * from TableName where CreatedOn = '2019-02-28 20:11:38.980'将数据类型转换为varchar数据datetime类型导致值超出范围。

为什么结果datetime和输入datetime的格式不同?

如果有任何区别,我正在使用 Microsoft SQL Server 2016 和 Microsoft SQL Server Management Studio v18.2。

4

1 回答 1

1

SQL Server 对字符串文字中月份和日期值的顺序感到困惑。日期和时间在数据库中没有格式。但是,字符串文字的解释和日期作为字符串文字的输出取决于用户对日期顺序和语言的选择。

您可以通过运行下面的查询并查找“dateformat”和“language”来找到当前会话的日期格式和语言设置:

dbcc useroptions

您还可以通过以下查询获取分配给您的会话的语言:

select @@language;

为避免在指定表示组合日期和时间值的字符串文字时出现区域日期/时间问题,请使用标准ISO 8601格式“YYYY-MM-DDThh:mm:ss”。“T”是文字字符。

例如:

select convert(datetime, '2019-02-28T20:11:38.980');

根据 Microsoft 文档中的字符串文字日期和时间格式部分,标准 ANSI 标准 SQL 日期格式“YYYY-MM-DD hh:mm:ss”应该是“多语言”。但是,它不适用于所有 SQL 语言(例如丹麦语)。

于 2019-08-16T21:14:57.433 回答