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