将 SQL 中的 VARCHAR 列转换为日期时间格式?

Posted

技术标签:

【中文标题】将 SQL 中的 VARCHAR 列转换为日期时间格式?【英文标题】:Convert VARCHAR a column in SQL to datetime format? 【发布时间】:2020-07-19 22:18:58 【问题描述】:

时间(varchar)

2020-07-19T02:28:22.729Z
2020-07-19T02:48:33.979Z
2020-07-19T02:48:48.250Z
2020-07-19T02:53:24.307Z
2020-07-19T02:53:48.278Z

我想在 ibm cloud 中将此 columntime(varchar) 更改为日期时间格式?

【问题讨论】:

我删除了不一致的数据库标签。请标记您真正使用的数据库。 所有数据库都有一堆字符串、转换/转换和日期时间函数,可以让您完成您正在寻找的内容,请查看您的数据库产品的文档。 【参考方案1】:

mysql和SQL Server(原标签)都理解这种格式,所以可以使用:

cast('2020-07-19T02:28:22.729Z' as datetime)

在两个数据库中,或使用列名:

cast(time as datetime)

【讨论】:

【参考方案2】:

大概你想把你的字符串变成timestamp而不是date,因为它包含毫秒。在 DB2 中,您可以为此使用 to_timestamp()。您需要先删除中间的'T',然后再删除后面的'Z'

应该这样做:

to_timestamp(
    replace(replace('2020-07-19T02:28:22.729Z', 'T', ' '), 'Z', ' '),
    'yyyy-mm-dd hh24:mi:ss.ff3'
)

Demo on DB Fiddle

select to_timestamp(
    replace(replace('2020-07-19T02:28:22.729Z', 'T', ' '), 'Z', ' '),
    'yyyy-mm-dd hh24:mi:ss.ff3'
) ts from sysibm.sysdummy1
| TS | | -------------------------------------------: | | 2020-07-19 02:28:22.729000000000 |

【讨论】:

如何从 mu 另一列检索时间,我正在使用此查询“select to_timestamp(replace(replace('Select "time" from QUAKE', 'T', ''), ' Z', ' '), 'yyyy-mm-dd hh24:mi:ss.ff3' ) 来自 sysibm.sysdummy1 的 ts”我收到类似“错误消息“从 QUAKE 选择“时间””无法使用格式解释TIMESTAMP_FORMAT 函数的字符串“yyyy-mm-dd hh24:mi:ss.ff3”.. SQLCODE=-20448, SQLSTATE=22007, DRIVER=4.26.14 了解有关此错误的更多信息”【参考方案3】:

试试这个:

/*
WITH QUAKE (time) AS
(
VALUES
  '2020-07-19T02:28:22.729Z'
, '2020-07-19T02:48:33.979Z'
, '2020-07-19T02:48:48.250Z'
, '2020-07-19T02:53:24.307Z'
, '2020-07-19T02:53:48.278Z'
)
*/
SELECT TIMESTAMP(TRANSLATE(time, ' ', 'TZ'))
FROM QUAKE;

【讨论】:

以上是关于将 SQL 中的 VARCHAR 列转换为日期时间格式?的主要内容,如果未能解决你的问题,请参考以下文章

将 varchar 数据类型转换为 datetime 数据类型导致 SQL 查询中的值超出范围

SQL - 将 varchar 转换为日期时间

SQL - 将 varchar (dd/mm/yyyy hh.mm AM/PM) 转换为日期时间

SQL Server 2008 中的 Varchar 到日期时间

如何将存储为 VARCHAR 的 UTC 日期时间值转换为常规日期时间

使用自定义格式在 SQL Server 上将 varchar 转换为 datetime