一些SQLite的语法
SQL今日 :
select * from 表名 where 字段名 between datetime(‘now’,‘start of day’,‘+1 seconds’) and datetime(‘now’,‘start of day’,‘+1 days’,‘-1 seconds’)
select * from 表名 where strftime(‘%Y-%m-%d’, datetime(‘now’)) = strftime(‘%Y-%m-%d’,字段名)
昨天:
select * from 表名 where 字段名 between datetime(‘now’,‘start of day’,‘-1 days’,‘+1 seconds’) and datetime(‘now’,‘start of day’,‘-1 seconds’)
select * from 表名 where strftime(‘%Y-%m-%d’, datetime(‘now’),‘-1 days’) = strftime(‘%Y-%m-%d’,字段名)
本周(周一到周日) :
select * from 表名 where 字段名 between datetime(‘now’,‘weekday 0’,‘-6 days’) and datetime(‘now’,‘weekday 0’,‘+1 days’)
select * from 表名 where strftime(‘%W’, datetime(‘now’)) = strftime(‘%W’,字段名)
上周(周一到周日) :
select * from 表名 where 字段名 between datetime(‘now’,‘weekday 0’,‘-13 days’) and datetime(‘now’,‘weekday 0’,‘-6 days’)
select * from 表名 where strftime(‘%W’, datetime(‘now’),‘-7 days’) = strftime(‘%W’,字段名)
本月 :
select * from 表名 where 字段名 between datetime(‘now’,‘start of month’,‘+1 seconds’) and datetime(‘now’,‘start of month’,‘+1 months’,‘-1 seconds’)
select * from 表名 where strftime(‘%Y-%m’, datetime(‘now’),) = strftime(‘%Y-%m’,字段名)
上月:
select * from 表名 where 字段名 between datetime(‘now’,‘start of month’,‘-1 months’,‘+1 seconds’) and datetime(‘now’,‘start of month’,‘-1 seconds’)
select * from 表名 where strftime(‘%m’, datetime(‘now’),‘-1 months’) = strftime(‘%m’,字段名)
今年本季度:
select * from 表名 where strftime(‘%m’, datetime(‘now’))/3 = strftime(‘%m’,字段名)/3 and strftime(‘%Y’, datetime(‘now’)) = strftime(‘%Y’,字段名)
今年上季度:
select * from 表名 where strftime(‘%m’, datetime(‘now’))/3 - 1 = strftime(‘%m’,字段名)/3 and strftime(‘%Y’, datetime(‘now’)) = strftime(‘%Y’,字段名)
本年:
select * from 表名 where strftime(‘%Y’, datetime(‘now’)) = strftime(‘%Y’,字段名)
近一周(今天)
select * from 表名 where 字段名 between date(‘now’,‘start of day’,‘-6 days’) and date(‘now’)
修饰符(modifier):
序号 符号 作用
1 [±]NNN years 增加/减去指定数值的年
2 [±]NNN months 增加/减去指定数值的月
3 [±]NNN days 增加/减去指定数值的天
4 [±]NNN hours 增加/减去指定数值的小时
5 [±]NNN minutes 增加/减去指定数值的分钟
6 [±]NNN.NNNN seconds 增加/减去指定数值的秒
7 start of year 当前日期的开始年
8 start of month 当前日期的开始月
9 start of day 当前日期的开始日
11 weekday N 表示返回下一个星期是N的日期和时间
12 unixepoch 用于将日期解释为UNIX时间(即:自1970-01-01以来的秒数,也就是时间戳)
13 localtime 表示返回本地时间
14 utc 表示返回UTC(世界统一时间)时间
符号 描述
%a 三个字符缩写的工作日名称,例如:Mon, Tue, Wed,等
%b 三个字符缩写的月份名称,例如:Jan,Feb,Mar等
%c 以数字表示的月份值,例如:1, 2, 3…12
%D 英文后缀如:0th, 1st, 2nd等的一个月之中的第几天
%d 如果是1个数字(小于10),那么一个月之中的第几天表示为加前导加0, 如:00, 01,02, …31
%e 没有前导零的月份的日子,例如:1,2,… 31
%f 微秒,范围在000000…999999
%H 24小时格式的小时,前导加0,例如:00,01…23
%h 小时,12小时格式,带前导零,例如:01,02 … 12
%I 与%h相同
%i 分数为零,例如:00,01,… 59
%j 一年中的的第几天,前导为0,例如,001,002,… 366
%k 24小时格式的小时,无前导零,例如:0,1,2 … 23
%l 12小时格式的小时,无前导零,例如:0,1,2 … 12
%M 月份全名称,例如:January, February,…December
%m 具有前导零的月份名称,例如:00,01,02,… 12
%p AM或PM,取决于其他时间说明符
%r 表示时间,12小时格式hh:mm:ss AM或PM
%S 表示秒,前导零,如:00,01,… 59
%s 与%S相同
%T 表示时间,24小时格式hh:mm:ss
%U 周的第一天是星期日,例如:00,01,02 … 53时,前导零的周数
%u 周的第一天是星期一,例如:00,01,02 … 53时,前导零的周数
%V 与%U相同,它与%X一起使用
%v 与%u相同,它与%x一起使用
%W 工作日的全称,例如:Sunday, Monday,…, Saturday
%w 工作日,以数字来表示(0 = 星期日,1 = 星期一等)
%X 周的四位数表示年份,第一天是星期日; 经常与%V一起使用
%x 周的四位数表示年份,第一天是星期日; 经常与%v一起使用
%Y 表示年份,四位数,例如2000,2001,…等。
%y 表示年份,两位数,例如00,01,…等。
%% 将百分比(%)字符添加到输出
SQLite 包括以下五个时间函数:
date(日期时间字符串, 修正符, 修正符, ……)
time(日期时间字符串, 修正符, 修正符, ……)
datetime(日期时间字符串, 修正符, 修正符, ……)
julianday(日期时间字符串, 修正符, 修正符, ……)
strftime(日期时间格式, 日期时间字符串, 修正符, 修正符, ……)
上述五个函数需要一个日期时间字符串做参数,后面可以跟零到多个修正符参数。而 strftime() 函数还需要一个日期时间格式字符串做第一个参数。
date() 函数返回一个以 “YYYY-MM-DD” 为格式的日期;
time() 函数返回一个以 “YYYY-MM-DD HH:MM:SS” 为格式的日期时间;
julianday() 函数返回一个天数,从格林威治时间公元前4714年11月24号开始算起;
strftime() 函数返回一个经过格式话的日期时间,它可以用下面的符号对日期和时间进行格式化:
%d 一月中的第几天 01-31
%f 小数形式的秒,SS.SSSS
%H 小时 00-24
%j 一年中的第几天 01-366
%J Julian Day Numbers
%m 月份 01-12
%M 分钟 00-59
%s 从 1970-01-01日开始计算的秒数
%S 秒 00-59
%w 星期,0-6,0是星期天
%W 一年中的第几周 00-53
%Y 年份 0000-9999
%% % 百分号
sqlite 中strftime()函数的用法 格式化日期时间函数
strftime()函数可以把YYYY-MM-DD HH:MM:SS格式的日期字符串转换成其它形式的字符串。
strftime()的语法是strftime(格式, 日期/时间, 修正符, 修正符, …)
它可以用以下的符号对日期和时间进行格式化:
%d 日期, 01-31
%f 小数形式的秒,SS.SSS
%H 小时, 00-23
%j 算出某一天是该年的第几天,001-366
%m 月份,00-12
%M 分钟, 00-59
%s 从1970年1月1日到现在的秒数
%S 秒, 00-59
%w 星期, 0-6 (0是星期天)
%W 算出某一天属于该年的第几周, 01-53
%Y 年, YYYY
%% 百分号
strftime()的用法举例如下:
select strftime(‘%Y-%m-%d %H:%M:%S’,’now’,’localtime’);
结果:2016-12-15 12:43:08
其实更好的用法是这样的,比如统,本月或本年的支出:
select strftime(‘%Y-%m’,日期) as 月份,sum(支出) as 月支出 from 流水帐 group by 月份;
求同步 环比的例子:
select t.m,t.ym,t.销量,t1.销量 同期,(case when t1.销量 is null then '' else (t.销量-t1.销量)/t1.销量 end) 同比,t2.销量 上期,(case when t2.销量 is null then '' else (t.销量-t2.销量)/t2.销量 end) 环比
from (
select strftime('%m',b.订购日期)+0 m,strftime('%Y-%m',b.订购日期) ym,sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = '1997'
group by strftime('%Y-%m',b.订购日期)
) t -- 1997年 m月份 ym年月 销量 销售额
left join (
select strftime('%m',b.订购日期)+0 m,strftime('%Y-%m',b.订购日期) ym,sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = '1996'
group by strftime('%Y-%m',b.订购日期)
) t1 on t.m = t1.m -- 1996 年 m月份 ym年月 销量 销售额
left join (
select (case when strftime('%m',b.订购日期)+0 <=11then strftime('%m',b.订购日期)+1 end) m, -- 1997年 使用then判断 ym中月份小于等于11 将月份+1strftime('%Y-%m',b.订购日期) ym,sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = '1997'
group by strftime('%Y-%m',b.订购日期)union
select (case when strftime('%m',b.订购日期)+0 =12then 1 end) m,strftime('%Y-%m',b.订购日期) ym,sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = '1996'
group by strftime('%Y-%m',b.订购日期)
) t2 on t.m = t2.m
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
