gpt4 book ai didi

sql - 为什么我的 126 日期时间没有返回中间有 T 的内容?

转载 作者:行者123 更新时间:2023-12-02 08:59:52 24 4
gpt4 key购买 nike

我决定对从应用程序返回的所有日期时间使用 8601 日期时间。突然,在一个特定的过程中,getdate() 没有返回中间带有 T 的日期时间。 我还应该提到,我正在使用 FOR XML PATH 将包含日期时间的集合转换为 XML。通常,当我将包含日期时间的表转换为 xml 时,我会得到 8601 个格式化日期。但在一种情况下,我不是。

select (cast(getdate() as datetime)) -- returns 2010-01-25 10:13:46.033

所以我直接这样转换:

select convert(datetime, getdate(), 126) -- returns 2010-01-25 10:14:35.923

但是如果我将它转换为 nvarchar 我会得到 T!

SELECT CONVERT(NVARCHAR(30), GETDATE(), 126) -- returns 2010-01-25T10:15:29.633

对我来说更奇怪的是,如果我用联合选择这个版本的多个版本,T 版本就会消失。但是选择不使用联合,T 版本(最后一个)仍然存在。

-- returns 4 rows of 2010-01-25 10:15:57.333
select getdate() union all
select (cast(getdate() as datetime)) union all
select convert(datetime, getdate(), 126) union all
SELECT CONVERT(NVARCHAR(30), GETDATE(), 126)

我真的不知道什么会导致这种情况发生。我认为 8601 日期与区域设置无关,所以我不认为是这样的。

引用(126 的“yyyy-mm-ddThh:mi:ss.mmm”):http://msdn.microsoft.com/en-us/library/ms187928.aspx

最佳答案

您将日期时间值与格式化字符串混淆了。

前两个示例根本不返回以任何方式格式化的日期,它只是 datetime值(value)。该值如何格式化为文本取决于从数据库获取该值后如何显示该值。如果您居住在不同的国家/地区,因此您的默认区域性设置不同,则日期可能会显示为 1/25/2010 10:14 AM相反。

在第二个示例中,格式参数 (126) 被忽略,因为从 datetime 转换时不涉及格式化或解析。值为 datetime值。

第三个示例格式化 datetime在从数据库返回之前将值转换为字符串,这就是为什么您以数据库使用的格式获取它。

如果您使用具有不同数据类型的联合,则为 type precedence决定结果的类型。 datetime type 的优先级高于 nvarchar ,因此它尝试转换 nvarchar值为datetime .

关于sql - 为什么我的 126 日期时间没有返回中间有 T 的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2134517/

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