微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将日期时间偏移量转换为 varchar

如何解决将日期时间偏移量转换为 varchar

我到处搜索,但似乎找不到此信息,并且它没有列在 CONVERT 的 MS 文档中(据我所知)。

给定日期/时间/偏移量:1997-12-31 14:53:00.123 +04:30

很容易将其转换为 datetimeoffset(3) 作为 CONVERT( datetimeoffset(3),'1997-12-31 14:53:00.123 +04:30' )

但是将它从 datetimeoffset(3) 转换回文本并不那么简单。

DECLARE @DateTimeOffset datetimeoffset(3) = '1997-12-31 14:53:00.123 +04:30';
DECLARE @StringDTO varchar(255) = CONVERT( nvarchar,@DateTimeOffset,121 );
SELECT @StringDTO;

我能找到的两个最接近的样式是 121127

  • 121 返回缺少实际时区值的 1997-12-31 14:53:00.1230000 +0
  • 127 返回 1997-12-31T10:23:00.1230000Z,它将所有内容转换为祖鲁时间。

请问有谁知道 yyyy-mm-dd hh:mi:ss.fff +zz:zz / 1997-12-31 14:53:00.123 +04:30 的转换样式吗?

我可以轻松地推出自己的函数,但想确认在执行此操作之前 sql Server 中不存在现有函数

非常感谢。

解决方法

这很奇怪,因为样式 121 works for me。但是,您可以随时尝试 format 例如

DECLARE @DateTimeOffset datetimeoffset(3) = '1997-12-31 14:53:00.123 +04:30';

SELECT
    CONVERT(NVARCHAR,@DateTimeOffset,121),FORMAT(@DateTimeOffset,'yyyy-MM-dd HH:mm:ss.fff zzz');

Convert 的性能更好,所以如果可以,请使用它。

然而,进一步查看您的数据,问题在于您实际上必须使用 datetimeoffset(6) 将秒的小数部分保留到小数点后 6 位。此时,您超出了默认的 nvarchar 长度 30。

所以指定大小可以解决这个问题。

DECLARE @DateTimeOffset datetimeoffset(6) = '1997-12-31 14:53:00.123 +04:30';

SELECT
    CONVERT(NVARCHAR(255),'yyyy-MM-dd HH:mm:ss.fff zzz');

当然最好的做法是始终在 SQL Server 中定义字符串的长度。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。