SQLite:将varchar格式时间拆分为日期与时分秒列的解决方案
SQLite 处理ISO8601格式字符串转时间戳并拆分日期时间
你的问题出在使用了Oracle/PostgreSQL风格的TO_DATE和TO_CHAR函数——SQLite并不支持这些函数,它有自己一套日期时间处理函数。针对你的需求,直接用SQLite内置的函数就能解决:
1. 直接查询转换结果
如果只是需要查询时生成这三个列(时间戳、日期、时分秒),执行以下SQL:
SELECT -- 转换为SQLite支持的datetime格式(等效Timestamp) datetime(your_column_name) AS timestamp_col, -- 提取YYYY-MM-DD格式的日期 date(your_column_name) AS date_col, -- 提取HH:MM:SS格式的时分秒(自动忽略毫秒部分) strftime('%H:%M:%S', your_column_name) AS time_col FROM your_table_name;
2. 给表添加新列并持久化数据
如果需要把这些转换后的值永久存在表中,先添加列再更新数据:
第一步:添加新列
ALTER TABLE your_table_name ADD COLUMN timestamp_col DATETIME; ALTER TABLE your_table_name ADD COLUMN date_col DATE; ALTER TABLE your_table_name ADD COLUMN time_col TEXT;
第二步:更新数据到新列
UPDATE your_table_name SET timestamp_col = datetime(your_column_name), date_col = date(your_column_name), time_col = strftime('%H:%M:%S', your_column_name);
关键说明
- SQLite原生支持解析你提供的
YYYY-MM-DDTHH:MM:SS.SSSZ格式字符串,datetime()、date()、strftime()函数都能直接识别处理,不需要额外处理T和Z符号。 - 如果需要保留毫秒部分的时分秒,可以把
strftime('%H:%M:%S', ...)改成strftime('%H:%M:%f', ...),会返回HH:MM:SS.SSS格式。
内容的提问来源于stack exchange,提问作者Yan
相关产品推荐
相关产品推荐

