将 datetimeoffset 转换为 varchar
Convert datetimeoffset to varchar
我到处搜索,但似乎找不到此信息,并且它没有在 CONVERT.
的 MS 文档中列出(据我所知)
给定 Date/Time/Offset: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;
我能找到的两个最接近的样式是 121
和 127
:
121
returns 1997-12-31 14:53:00.1230000 +0
缺少实际的时区值
127
returns 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 服务器中没有现有的功能。
非常感谢。
这很奇怪,因为样式 121 works for me. However you can always try 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), @DateTimeOffset, 121)
, FORMAT(@DateTimeOffset, 'yyyy-MM-dd HH:mm:ss.fff zzz');
当然最好的做法是始终在 SQL 服务器中定义字符串的长度。
我到处搜索,但似乎找不到此信息,并且它没有在 CONVERT.
的 MS 文档中列出(据我所知)给定 Date/Time/Offset: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;
我能找到的两个最接近的样式是 121
和 127
:
121
returns1997-12-31 14:53:00.1230000 +0
缺少实际的时区值127
returns1997-12-31T10:23:00.1230000Z
正在将所有内容转换为祖鲁时间。
有人知道yyyy-mm-dd hh:mi:ss.fff +zz:zz
/ 1997-12-31 14:53:00.123 +04:30
的转换样式吗?
我可以轻松地推出自己的功能,但想确认在我这样做之前 SQL 服务器中没有现有的功能。
非常感谢。
这很奇怪,因为样式 121 works for me. However you can always try 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), @DateTimeOffset, 121)
, FORMAT(@DateTimeOffset, 'yyyy-MM-dd HH:mm:ss.fff zzz');
当然最好的做法是始终在 SQL 服务器中定义字符串的长度。