SQLITE每月和每周订单数据来自;年月日;格式

SQLITE每月和每周订单数据来自;年月日;格式,sqlite,Sqlite,我有一个表,表中有一个日期格式的列,名为sell_date 在本栏中,我有以下格式的日期“MM/dd/yyyy” 我想要的是选择按周和月排序的行。比如,如果我从微调器中选择一月-月和一年,它将显示该月-年格式的所有行。 就每周而言,我不知道该怎么做:( 有没有这样的SQLite函数可以做到这一点 我已经试过strftime(“%m”,销售日期),但不起作用 谢谢。你可以用 ORDER BY (substr(sell_date,7,4)||substr(sell_date,1,2)||substr

我有一个表,表中有一个日期格式的列,名为sell_date

在本栏中,我有以下格式的日期“MM/dd/yyyy”

我想要的是选择按周和月排序的行。比如,如果我从微调器中选择一月-月和一年,它将显示该月-年格式的所有行。 就每周而言,我不知道该怎么做:(

有没有这样的SQLite函数可以做到这一点

我已经试过strftime(“%m”,销售日期),但不起作用

谢谢。

你可以用

ORDER BY (substr(sell_date,7,4)||substr(sell_date,1,2)||substr(sell_date,4,2));
这将要求严格遵守日期和月份部分的MM/dd/yyyy,即01,02…(例如,2018年1月1日不能按预期工作)

但是,最好是以一种公认的格式存储日期,这种格式可以进行排序,另外还允许通过内置的日期和时间函数(如strftime)来管理日期(因为日期不是重新确认的格式,
strftime('%m',sell\u date)
对您不起作用)

您可以使用
strftime(“%m”,substr(sell_date,7,4)| |“-”substr(sell_date,1,2)| |“-”substr(sell_date,4,2))
而不是
strftime(“%m”,sell_date)
(仅在严格遵守MM/dd/yyyyy的情况下)

关于每周,如果你是指每周,你可以使用%W来获取一年中的一周。同样,如果日期是公认的格式,那么
strftime('%W',substr(sell_date,7,4)| substr)-'| substr(sell_date,1,2)| substr(sell_date,4,2))
将返回一年中的一周

应用这两种方法,您可以使用:-

ORDER BY 
    (substr(sell_date,7,4)||substr(sell_date,1,2)||substr(sell_date,4,2)),
    strftime('%W',substr(sell_date,7,4)||'-'||substr(sell_date,1,2)||'-'||substr(sell_date,4,2))

例子 考虑以下产生两个结果的情况。第一个选择所有行(3行插入日期为2018年10月14日(第41周)、2018年9月12日(第37周)和2018年11月13日(第46周)的订单,如预期(按月,然后按周)

对于插图,将生成显示一年中月份和周的列。周列也用于第二次查询中,以选择与周匹配的行(2018年9月12日第37周):-

第一个查询的结果是:-

第二个是WHERE子句(将值转换为整数),它根据一年中的特定周选择行,结果是:-

现在,如果日期以公认的格式(YYYY-MM-DD)存储,则上述内容将更简单:-

DROP TABLE IF EXISTS table2;
CREATE TABLE IF NOT EXISTS table2 (sell_date TEXT);
INSERT INTO table2 VALUES ('2018-10-14'),('2018-09-12'),('2018-11-13');

SELECT *, strftime('%m',sell_date), strftime('%W',sell_date)
FROM table2 
ORDER BY sell_date, strftime('%W',sell_date)
;

SELECT *, strftime('%m',sell_date), strftime('%W',sell_date)
FROM table2 
WHERE CAST(strftime('%W',sell_date) AS INTEGER) = 37
ORDER BY sell_date, strftime('%W',sell_date)**strong text**

substr(sell_date,7,4)| | substr(sell_date,1,2)| | substr(sell_date,4,2)这是什么意思?以及如何将数据与给定数据匹配?您可以用相同的方式将上述内容应用于WHERE子句。这意味着从第7个字符(年份部分)开始取4个字符,并将其与从第1个字符(月份部分)开始的字符连接起来并将其与从第4个字符(月的一天部分)开始的2个字符相连,因此2018年3月1日变为20180103(在第二个字符中,它在两个部分之间添加了一个连字符,因此您可以得到2018-03-01,这是一种公认的格式,因此strftime可以使用)。
DROP TABLE IF EXISTS table2;
CREATE TABLE IF NOT EXISTS table2 (sell_date TEXT);
INSERT INTO table2 VALUES ('2018-10-14'),('2018-09-12'),('2018-11-13');

SELECT *, strftime('%m',sell_date), strftime('%W',sell_date)
FROM table2 
ORDER BY sell_date, strftime('%W',sell_date)
;

SELECT *, strftime('%m',sell_date), strftime('%W',sell_date)
FROM table2 
WHERE CAST(strftime('%W',sell_date) AS INTEGER) = 37
ORDER BY sell_date, strftime('%W',sell_date)**strong text**