SQL 日期时间列表示不正确

SQL Datetime column represented incorrectly

提问人:Nathan M 提问时间:7/15/2023 最后编辑:marc_sNathan M 更新时间:7/18/2023 访问量:84

问:

当尝试与 类型的 SQL Server 表中的列进行交互时,某一行似乎解析不正确。DATETIME

最初以 的格式表示,值解析不正确为 ,当尝试以任何方式(、等)与该值交互时,它将解析为某种形式的日期。DATETIMEdd:mm:yyyy hh:ss12/6/2022 22:06CASTCONVERT'2022-12-07T03:06:00'

这是我发现的 600 个条目中唯一一个解析不正确的值 ()。'12/6/2022 22:06'

不幸的是,我只有对此数据库的读取访问权限。

我试图强制将此值转换为文本 () 或其他格式,但无论日期如何都会被解析,例如:nvarcharDATE

CAST(dateoccurred AS varchar(19))

将变成.'Dec 7 2022 3:06AM'

是否有转换函数可以将查询中最初表示的值强制转换为文本格式,以便稍后在数据管道中进行分析?

使用的版本是 Microsoft SQL Server 2019。

sql-server datetime 分析 sql-server-2019

评论

1赞 Panagiotis Kanavos 7/15/2023
日期时间不需要解析,它是一个二进制值。出于同样的原因,它也没有格式。其他日期和时间相关类型也是如此。您是否混淆了应用程序或客户端工具显示实际格式日期的方式?或者该列是包含特定格式的日期字符串的文本列?
0赞 Panagiotis Kanavos 7/15/2023
您必须发布实际演示问题的可执行代码。日期时间是二进制的,这是没有争议的。字段类型也不能仅针对单个值进行更改。还有其他事情正在发生,但我们无法从问题中猜测
0赞 Nathan M 7/15/2023
@Panagiotis 卡纳沃斯 是的,也许我是,对我来说很奇怪,所有其他日期都得到了正确的表示。
1赞 Panagiotis Kanavos 7/15/2023
为什么你关心 Web 应用程序如何显示日期?日期没有格式。我想你不能修改网络应用程序
1赞 Martin Smith 7/15/2023
如果更改为 - 我怀疑该值是 a 而不是22:063:06datetimeoffsetdatetime

答:

1赞 David Browne - Microsoft 7/15/2023 #1

要可靠地将日期时间转换为文本并返回,请使用 ISO 8601 格式,即 CONVERT 中的样式 126

select convert(varchar(200), dateoccured, 126)

文本将如下所示

2023-07-14T14:25:50.250

评论

1赞 Panagiotis Kanavos 7/15/2023
我怀疑有人使用了 127,生成了 UTC 时间并省略了 ,或者 OP 忘记粘贴它Z
0赞 Nathan M 7/18/2023 #2

问题最终是格式存在差异,最初在 Web 应用程序中显示的日期格式为 mm:dd:yyyy,但从 api 中提取的日期采用 yyyy:mm:dd,并伴有时区差异。