计算工作日的最佳方法是什么?

问题描述 投票:0回答:1

我的时间序列数据的文本时间戳格式为

DD.MM.YYYY HH:mm:ss.sss
(
.sss
= ms)。 我从 TEXT 时间戳字段中提取每个组件,并将 ISO 格式的时间戳组成为
YYYY-MM-DD HH:mm:ss.sss

我通读了关于 strftime

 函数的文档
,但以下内容不起作用:

CREATE TABLE tickdata (
    DateTime TEXT, -- source format = "DD.MM.YYYY HH:mm:ss.sss"
    class TEXT,
    category TEXT,
    upper INT,
    lower INT,
    diff INT GENERATED ALWAYS AS (upper - lower) STORED,
    gen_year  INT GENERATED ALWAYS AS (SUBSTRING(DateTime, 7, 4)) STORED,
    gen_month INT GENERATED ALWAYS AS (SUBSTRING(DateTime, 4, 2)) STORED,
    gen_day   INT GENERATED ALWAYS AS (SUBSTRING(DateTime, 1, 2)) STORED,
    gen_wkd   INT GENERATED ALWAYS AS CAST(strftime('%w',DateTime) AS INT) STORED, -- syntax error
--  gen_wkd   INT GENERATED ALWAYS AS strftime('%w',DateTime) STORED,       -- also syntax error
--  gen_wkd   CAST(strftime('%w',DateTime) AS INT) GENERATED ALWAYS STORED, -- also syntax error
    gen_hr    INT GENERATED ALWAYS AS (SUBSTRING(DateTime, 12, 2)) STORED,
    gen_min   INT GENERATED ALWAYS AS (SUBSTRING(DateTime, 15, 2)) STORED,
    gen_sec   INT GENERATED ALWAYS AS (SUBSTRING(DateTime, 18, 2)) STORED,
    gen_ms    INT GENERATED ALWAYS AS (SUBSTRING(DateTime, 21, 3)) STORED,
    gen_ISODate TEXT GENERATED ALWAYS AS (
        FORMAT('%04d', gen_year) || '-' ||
        FORMAT('%02d', gen_month) || '-' ||
        FORMAT('%02d', gen_day) || ' ' ||
        FORMAT('%02d', gen_hr) || ':' ||
        FORMAT('%02d', gen_min) || ':' ||
        FORMAT('%02d', gen_sec) || '.' ||
        FORMAT('%03d', gen_ms) -- format = "YYYY-MM-DD HH:mm:ss.sss"
    ) STORED
);

如何创建一个计算列来存储每行时间戳所属的星期几?

sqlite datetime calculated-columns dayofweek weekday
1个回答
0
投票

如评论中所示,您需要将括号括起来。

此外,你传递了错误的论点。

gen_wkd INT GENERATED ALWAYS AS (strftime('%w', gen_ISODate)) STORED,

多个

format
+ concat 可能只是一次调用,并且通过
explain
输出来判断,这样可能会更有效:

printf('%04d-%02d-%02d %02d:%02d:%02d.%03d',
       gen_year, gen_month, gen_day,
       gen_hr, gen_min, gen_sec, gen_ms)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.