首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQLite的虚拟生成列中格式化本地时间

问在SQLite的虚拟生成列中格式化本地时间
EN

Stack Overflow用户
提问于 2021-03-10 22:26:12
回答 1查看 185关注 0票数 1

我想以毫秒为单位存储日期,但也希望看到它的格式化表示形式。为了不浪费驱动器空间,为此使用虚拟生成的列是有意义的。

我写的:

代码语言:javascript
复制
DROP TABLE IF EXISTS example;
CREATE TABLE IF NOT EXISTS example (
    time INTEGER,
    formatted_time GENERATED ALWAYS AS (strftime('%Y.%m.%d %H:%m', time/1000, 'unixepoch')) VIRTUAL
);
INSERT INTO example (time) VALUES (1605960000000);
INSERT INTO example (time) VALUES (1615413202000);

它可以工作,但我不能设置strftime(format,timestring,modifier,modifier...)的第二个修饰符来获得本地时间。(默认情况下,它返回UTC时间。)

当我使用:

代码语言:javascript
复制
formatted_time GENERATED ALWAYS AS (strftime('%Y.%m.%d %H:%m', time/1000, 'unixepoch', 'localtime')) VIRTUAL

当我插入数据时,它会抛出Result: non-deterministic use of strftime() in a generated column。

虽然它如预期的那样运作:

代码语言:javascript
复制
select strftime('%Y.%m.%d %H:%m', 1615413202000/1000, 'unixepoch', 'localtime');

如何使用格式化的本地时间创建虚拟列?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-11 16:59:42

我是不可能。

根据这一答案:

生成列的值所需的deterministic).在任何时区的任何机器上都是相同的(be SQLite )。即使对于虚拟生成的列。

在我的例子中,对于在不同时区打开的同一个表,time值1615413202000的formatted_time将是不同的,因此该表将是“非确定性的”。

作为解决办法,可以创建一个视图

代码语言:javascript
复制
CREATE VIEW example_view AS
SELECT time, strftime('%Y.%m.%d %H:%m', time/1000, 'unixepoch', 'localtime') as formatted_time_local
FROM example;

(基于https://stackoverflow.com/a/66300577/11468937)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66573799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档