将 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 (dd/mm/yyyy hh.mm AM/PM) 转换为日期时间
SQL Server 2008 中的 Varchar 到日期时间