我有字符串'Tue,2021 年 12 月 7 日 04:35:05 GMT',我需要转换为 smalldatetime 格式,如 '2021-12-07 04:35:05'(yyyy-mm-dd hh:mm:ss) sql服务器。请帮忙。提前致谢。
问问题
32 次
2 回答
0
以防日期时间字符串不仅在 GMT 时区。
如果您想在固定时区有一个小的日期时间。
这是一个使用参考表的演示。
样本数据
create table ref_timezones ( tz_code varchar(8) primary key, tz_offset char(6) not null check (tz_offset like '[+-][01][0-9]:[0-9][0-9]'), name varchar(30) ); insert into ref_timezones ( tz_code, tz_offset ) values ('CDT', '-05:00'), ('EST', '-05:00'), ('Z', '+00:00'), ('GMT', '+00:00'), ('+00:00', '+00:00'), ('CET', '+01:00'), ('CEST', '+02:00'), ('ACDT', '+10:30'); create table test (col varchar(30)); insert into test (col) values ('Tue, 07 Dec 2021 04:35:05 GMT') , ('Wed, 08 Dec 2021 05:46:36 CEST')
询问
SELECT col , TRY_CAST(SUBSTRING(col,6,20) AS DATETIME) AS dt_no_offset , CAST(SWITCHOFFSET( TRY_CAST( SUBSTRING(col, PATINDEX('%[0-9]%', col), 21) + COALESCE(tz.tz_offset, '+00:00') AS DATETIMEOFFSET(0)), '+00:00') AS SMALLDATETIME) AS small_dt_at_zulu FROM test OUTER APPLY ( SELECT tz_offset FROM ref_timezones WHERE tz_code = RIGHT(col, PATINDEX('%_[ ][0-9][0-9]:%', REVERSE(col))) ) tz;
山口 | dt_no_offset | small_dt_at_zulu |
---|---|---|
格林威治标准时间 2021 年 12 月 7 日星期二 04:35:05 | 2021-12-07 04:35:05.000 | 2021-12-07 04:35 |
2021 年 12 月 8 日星期三 05:46:36 CEST | 2021-12-08 05:46:36.000 | 2021-12-08 03:47 |
db<>在这里摆弄
于 2022-01-19T17:15:34.197 回答
0
如果您从值中截断日期名称和时区,并且您使用的是基于英语的语言,则此方法有效。我假设您的值始终采用以下格式ddd, dd MMM yyyy hh:mm:ss tz
:
SELECT TRY_CONVERT(smalldatetime, SUBSTRING('Tue, 07 Dec 2021 04:35:05 GMT',6,20);
请注意,smalldatetime
精确到 1 分钟,因此会丢失秒精度。因此,对于您的价值,2021-12-07 04:35:00
将被退回。
于 2022-01-19T14:37:09.260 回答