sqlite3日期时间格式化和自动输入

文章目录

Sqlite3系列:初步💎where💎select

基础命令

sqlite中并未提供单独的日期时间类型,但提供了三种时间表示方式

  • 通过text来存储时间文本
  • 用整型来存储时间戳,时间戳是从1970-01-01算起的秒数
  • 用浮点型来存储自儒略日开始算起的天数,儒略日即公元前4713年1月1日中午12点。

并且提供了一些日期时间函数,

函数 返回值 格式
date(timestring, ...) 日期 YYYY-MM-DD
time(timestring, ...) 时间 HH:MM:SS
datetime(timestring, ...) 日期时间 YYYY-MM-DD HH:MM:SS
julianday(timestring, ...) 天数 自儒略日起算
strftime(format, timestring, ...) 日期 format指定

简单示例如下

sql 复制代码
sqlite> select datetime('now');
2023-08-17 11:33:22
sqlite> select time('12:00');
12:00:00
sqlite> select date('2023-01-01');
2023-01-01

在未加修饰的情况下,日期格式只能YYYY-MM-DD,如果输入2023-1-1则并不会识别为日期。

修饰符

在timstring后面,可以接一些修饰符,以更改输出,共有三种类型。第一种是在当前时间的基础上做加减法,例如

sql 复制代码
sqlite> select date('2023-08-17', '-4 months', '1 days');
2023-04-18

表示2023年8月17日减去4个月,然后再加上1天。days可以换成months, years, hours, minutes以及seconds,其中秒数的运算支持浮点型。

第二种是根指定相对于当前时刻的比较特殊的时间,比如本月第一天,一共有四个修饰符,分别是start of month, start of year, start of day, weekday N,其中weekday表示当前时刻距离最近的下一个星期N对应的日期,示例如下

sql 复制代码
sqlite> select date('2023-08-17', 'weekday 2');
2023-08-22

表示2023年8月17日的下一个星期二是8月22日。

第三类用于指定时间格式,共有以下三种情况

unixepoch localtime utc
unix时间戳 本地时间 utc时间

格式化

strftime函数支持日期时间的格式化操作,

替换 描述 范围 替换 描述 范围
%j 年中日号 001-366 %d 月中日号 01-31
%W 年中周号 01-53 %w 周中日号 0-6
%J 儒略日数 DDDD.DDDD
%Y 年 YYYY %m 月 00-12
%H 小时 00-23 %M 分 00-59
%f 带小数部分的秒 SS.SSS
%s 时间戳的秒数 %S 秒 00-59
%% % symbol

其中,周日用0表示。

示例如下

sql 复制代码
sqlite> select strftime('今天是%Y年第%j天', 'now');
今天是2023年第229天

自动输入时间

向数据库中输入日期时间和输入其他变量并没有区别,下面新建一个表,最后两列是日期时间,然后输入一组数据,效果如下。

sql 复制代码
sqlite> create table test(id int, name text, date, time);
sqlite> insert into test values(1, 'a', date('now'), time('now'));
sqlite> select * from test;
1|a|2023-08-17|11:56:04

但在sqlite3中,日期时间有更便捷的输入方式,只需在创建表的时候,为其添加一个默认的时间函数就可以了。

sql 复制代码
sqlite> create table dtTest([id] int, name text, [date] TimeStamp default (date('now')), [time] timeStamp default (time('now')));

这个表一共有4列,只有name是需要手动输入的

sql 复制代码
sqlite> insert into dtTest(name) values("a");
sqlite> insert into dtTest(name) values("b");
sqlite> select * from dtTest;
|a|2023-08-17|12:05:39
|b|2023-08-17|12:05:41
相关推荐
小马不起床3 小时前
Django 后端实战指南_14:门店、省份、用户门店关系查询接口
数据库·django·sqlite
下页、再停留3 小时前
【C#桌面客户端系列学习-14】SQLite数据库之增删改查完整示例
数据库·sqlite
weixin_382395232 天前
0-500 人工厂的生产 PMC 系统怎么做?基于 Tauri + SQLite 的性能架构实践与 5000 物料压测实录
数据库·架构·sqlite
winfredzhang2 天前
从零实现“照片按地理位置显示在矢量地图上”:Flask + SQLite + Leaflet 全栈实战
python·sqlite·flask
小马不起床3 天前
Django 后端实战指南_10:用户扩展档案信息表
python·django·sqlite
软件交付观察室3 天前
数据大屏总数与明细为什么对不上?2026项目开发排查指南
软件测试·数据库·sql·sqlite·数据可视化
零基础1234 天前
为什么 Agent 用 SQLite 数据库?
前端·人工智能·sqlite·开源
小马不起床4 天前
Django 后端实战指南_5:实现 JWT 登录
python·django·sqlite
hhb_6185 天前
Flask+SQLite实现用户管理接口
python·sqlite·flask
东莞市云毅网络有限公司5 天前
客服记录里的问句怎么变成知识库条目:意图聚类的 Python 实现
python·sqlite·自动化运维·geo·数据监测