sqlite3-时间

在sqlite3中时间函数有好几个,刚开始看着好乱,连一个系统时间都搞不定。不过学完了发现它就像模块化的组装语句,语法更口语化

如果只是随便写写,相比而言,oracle感觉简单一些,容易上手,sqlite看着就特别烦的感觉

oracle

  • 比如Oracle中获取系统时间使用sysdate,使用to_date()来格式化时间,基本上能满足日常使用。
1
2
3
select sysdate from dual;
select to_date(sysdate,'YYYYMMDDhh24miss') from dual;
select to_date('20200101','YYYY-MM-DD') from dual;

sqlite

我觉得这个在取时间的时候localtime是一个必须的参数,因为加了这个时间才是本地时间,不然有啥用呢

  • 在sqllite中获取时间有好几个不同的函数
    • date(timestring, modifier, modifier, ...) 获取日期 (年月日)
    • time(timestring, modifier, modifier, ...) 获取时间 (时分秒)
    • datetime(timestring, modifier, modifier, ...) 获取日期加时间(年月日时分秒)
  • 格式化时间
    • strftime(format, timestring, modifier, modifier, ...)
1
2
3
4
select date();   --select date('now');
select time(); -- select time('now');
select datetime(); --select datetime('now');
select strftime('%Y-%m-%d %H:%M:%S','now');

## 修饰符

  • x days

    1
    select date('now','+3 days');
  • xhours

    1
    select time('now','localtime','-1 hours');	--获取系统时间
  • x minutes

  • x.x seconds

  • x months

  • x years

  • start of month

    1
    select date('now','start of month');
  • start of year

  • start of day

  • weekday N

  • unixepoch

  • localtime

    1
    select time('now','localtime')
  • utc


time,datetime默认取的是子午线所在的时间,但是会发现这个时间(小时)与我们系统(东八区)时间并不相同。所以需要修饰符modifier

1
2
3
4
5
select time('now','localtime');	--获取正确本地时间,可以看出localtime是一个modifier,now是一个timestring

select time(current_timestamp,'localtime'); --current_timestamp也是一个timestring
select datetime(current_timestamp,'localtime');
select date('now','+1 month','start of month','-1 day'); --一个月最后一天

格式化

替换 描述
%Y 年,YYYY
%m 月,00-12
%d 一月中的第几天,01-31
%H 小时,00-23
%M 分,00-59
%S 秒,00-59
%f 带小数部分的秒,SS.SSS
%s 从 1970-01-01 算起的秒数
%j 一年中的第几天,001-366
%w 一周中的第几天,0-6 (0 is Sunday)
%W 一年中的第几周,01-53
%% % symbol

格式化日期strftime(format, timestring, modifier, modifier, ...)

1
2
3
4
5
select strftime('%Y-%m-%d %H:%M:%S','now'); 
select strftime('%Y-%m-%d %H:%M:%S','now','localtime');
select strftime('%j','now','localtime');
select strftime('%w','now');
select strftime('%W','now');