前言

本文记录一些sqlite相关笔记,随时更新。

正文

  1. 时间函数
  • datetime()
-- 当前时间 2022-03-24 17:32:43
select datetime('now'); --2022-03-24 09:32:57
select datetime('now', 'unixepoch'); --1970-01-29 11:14:22
select datetime('now', 'utc'); --2022-03-24 01:34:34
select datetime('now', 'localtime'); --2022-03-24 17:35:05
select datetime('now', 'localtime', '-1 day'); --2022-03-23 17:35:05
  • strftime()
-- 格式化字符串到指定格式
select strftime("%Y-%m-%d","2023-02-08 14:33:03"); --2023-02-08
-- 获取毫秒时间戳
select strftime('%s', '2023-02-13','utc')||substr(strftime('%f', '2023-02-13','utc'), 4); --1676217600000(2023-02-13 00:00:00)
select strftime('%s', '2023-02-13','localtime')||substr(strftime('%f', '2023-02-13','localtime'), 4); --1676275200000(2023-02-13 16:00:00)
select strftime('%s', '2023-02-13')||substr(strftime('%f', '2023-02-13'), 4); -- 1676246400000(2023-02-13 08:00:00)
  • date()
--与datetime几乎相同,不过输出仅仅精确到天
select date("now","localtime"); --2023-02-08
select date("now","localtime","-1 days"); --2023-02-07
select date("now","unixepoch"); -- 1970-01-29

参考SQLite 日期 & 时间

  • random()
-- 在一定规则下得到了数据集,将数据集随机排序,然后选择第一条数据
-- 这样的好处是满足某种条件下打乱查询结果的排列顺序;缺点是适合小范围数据集,频繁使用ORDER BY RANDOM()可能会导致性能问题,因为数据库需要为每一行生成一个随机数,然后基于这些随机数进行排序,这在大型数据集中会非常消耗资源。
SELECT * FROM table_name WHERE id > target_id ORDER BY RANDOM() LIMIT 1;
  1. 字符串截取

    函数:substr(string string,num start,num length)

    用法:

    string为字符串;

    start为起始位置;字符串的第一个字符的位置为1,不是从0开始计算

    length为长度。

    参考:sqlite 截取字符串函数substr

  2. 获取字符串长度

    length()

    参考:SQLite 常用函数

  3. 字符串拼接

    "aaa"||"bbb"

  4. 支持regexp正则表达式

    参考:python sqlite3 支持REGEXP语句 正则表达式 regular expression

import sqlite3
import re def regexp(expr, item):
reg = re.compile(expr)
return reg.search(item) is not None conn = sqlite3.connect(':memory:')
conn.create_function("REGEXP", 2, regexp)
cursor = conn.cursor()
cursor.execute('CREATE TABLE foo (bar TEXT)')
cursor.executemany('INSERT INTO foo (bar) VALUES (?)',[('aaa"test"',),('blah',)])
cursor.execute('SELECT bar FROM foo WHERE bar REGEXP ?',['"test"'])
data=cursor.fetchall()
print(data)
# 如果是在类中定义
def regexp(self, expr, item):
'''
正则表达式函数
@params expr: 需要搜索的正则表达式
@params item: sqlite 传入的需要搜索的内容
'''
if type(item).__name__ == "bytes":
item = item.decode()
reg = re.compile(expr)
return reg.search(item) is not None
self.conn.create_function("regexp", 2, self.regexp)
  1. 查询结果返回字典类型
# 在类中定义
def dict_factory(self, cursor, row):
d = {}
for index, col in enumerate(cursor.description):
d[col[0]] = row[index]
return d
self.conn = sqlite3.connect(self.dbname)
self.conn.row_factory = self.dict_factory
  1. 获取uuid
select substr(u, 1, 8)||'-'||substr(u, 8, 4)||'-'||substr(u,12,4)||'-'||substr(u,16,4)||'-'||substr(u,20,12) as uuid from (select lower(hex(randomblob(16))) as u) t;
  1. sqlite3 导出数据为 csv,导入csv数据

    导入的前提为数据库必须有这个表,没有表结构的还需要研究一下怎么导入

    导出device表保存为device.csv
#!/bin/bash
db=tst.db
sqlite3 $db << EOF
.output device.csv
select * from device;
.output stdout
.exit
EOF

导入device.csv到数据库

#!/bin/bash
db=tst.db
file=device.csv
sqlite3 $db << EOF
.import ./$file device
.exit
EOF

只是导出的话,也可以参考博客SQLite中.mode的演示说明设置导出格式

参考:

[1]. Sqlite 命令行导出、导入数据(直接支持CSV)

[2]. sqlite3: 用脚本批量导出sqlite数据库中的表格数据

[3]. SQLite中.mode的演示说明

sqlite相关的更多相关文章

  1. sqlite相关使用

    一.SQLite简介   SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能 ...

  2. SQLite相关异常

    SQLite的异常大多都和异常IO操作有关,这类异常通常在debug测试的时候难以发现通常和用户的操作有关系,根据我遇到的包括以下几种: 1.No transaction is active 这种情况 ...

  3. android-数据库SQLite相关

    android平台下的SQLite数据库是一种轻量级数据库,支持标准的SQL语句. 本文将介绍 android数据库的创建 利用sql语句对数据库增删改查 系统api数据库增删改查 数据库的事务 1, ...

  4. Entity Framework使用Sqlite时的一些配置

    前段时间试着用Entity Framework for Sqlite环境,发现了一些坑坑洼洼,记录一下. 同时试了一下配置多种数据库,包括Sqlite.Sql Server.Sql Server Lo ...

  5. iphone开发中数据持久化之——嵌入式SQLite(三)

    前两篇分别讨论了使用属性列表的数据持久化.使用对象归档的数据持久化,本文将讨论第三个实现数据持久化的方法---嵌入式SQL数据库SQLite3.SQLite3在存储和检索大量数据方面非常有效.它还能够 ...

  6. Swift - 操作SQLite数据库(引用SQLite3库)

    SQLite轻量级数据库在移动应用中使用非常普遍,但是目前的库是C编写的,为了方便使用,对SQLite相关的操作用Swift进行了封装.这个封装代码使用了一个开源项目SQLiteDB,地址是:http ...

  7. SQLite 数据库

    内容来源:高成珍.钟元生<Android编程经典案例解析> SQLite 数据库是Android 中内嵌的轻量级关系型数据库,本质上只是一个文件.SQLite 内部只支持NULL,INTE ...

  8. 一步一步教你用c# entity framework6 连接 sqlite 实现增删改查

    使用entity framework6 连接 SQLite 数据库 前言 很多小型应用程序中,都要使用数据库,而现在比较流行的本地数据库非SQLite莫属. 第一步:前期准备 开发环境:vs2015 ...

  9. Xamarin SQLite教程数据库访问与生成

    Xamarin SQLite教程数据库访问与生成 在本教程中,我们将讲解如何开发SQLite相关的App.在编写程序前,首先需要做一些准备工作,如了解Xamarin数据库访问方式,添加引用,构建使用库 ...

  10. Android对Sqlite数据库的增删改查

    SqLite 数据库 Google 为我们提供了sqlite相关的api SqLiteOpenHelper 这是一个抽象的类 如果想要使用的话,需要其他的类去继承他 SqLiteDatabase 类 ...

随机推荐

  1. Three加载3D模型贴图

    Three加载3D模型贴图 准备阶段 3D模型 three 库文件 纹理图片 相关资料 官方开发文档: https://threejs.org/docs 官网编辑3D模型:https://threej ...

  2. QShop商城--项目介绍

    QShop商城-项目介绍 QShop商城,是全新推出的一款轻量级.高性能.前后端分离的电商系统,支持微信小程序,前后端源码100%开源,完美支持二次开发,让您快速搭建个性化独立商城. 技术架构:.Ne ...

  3. npm 安装 sass 引用

    1.npm install node-sass --save-dev 2.npm install sass-loader --save-dev npm i less-loader  --save-de ...

  4. 原生Django出现同源策略跨域的解决方式

    解决方式: 在返回数据的时候,添加响应头信息: 例如:

  5. iOS使用SignalR客户端代码典范-桥接web SignalR 客户端库

    一.SignalR介绍 SignalR是微软基于.Net提供的一个开源实时Web RPC库,可以用在web实时通信的需求上面,比如聊天,web数据更新 SignalR的接口使用十分简单 由于最近的一个 ...

  6. FRDM-MCXN947开发板之RGB灯

    一.背景 RGB LED:通过红.绿.蓝三种颜色组合发光的LED,可以理解由三个不同发光属性的LED组成,这个是LCD平板显示原理的基础,一个LED相当于屏幕上面的一个像素 FRDM-MCXN947集 ...

  7. 【深度学习】c++部署onnx模型(Yolov5、PP-HumanSeg、GoogLeNet、UNet)

    这两天部署了好多模型,记录一下.代码链接. onnxruntime在第一张图的推理上比opencv快很多,但在后面的图上略微慢了一点. 不同的模型的部署时的输出不同,处理时需要对输出比较了解,下面分别 ...

  8. flutter 打包web应用指定上下文

    使用flutter build web命令打包的应用不包含上下文,只能部署在根目录.如何指定上下文,部署在子目录下呢? 有两种办法: 1.修改web/index.html文件 修改 <base ...

  9. 30万奖金池鼓励工控人,AIRIOT智慧物联应用场景创新大赛等你来战!

    随着工业和智慧领域数智化发展步伐的逐步加快,智慧物联应用场景越来越广泛,涵盖了智慧城市.智能园区.智慧能源.智慧电力.智能制造.工业物联网等多个领域.航天科技控股集团股份有限公司举办[AIRIOT智慧 ...

  10. 一款.NET开源、免费、实用的多功能原神工具箱(改善桌面端玩家的游戏体验)

    前言 今天大姚给大家分享一款.NET开源(MIT License).免费.实用的多功能原神工具箱,旨在改善桌面端玩家的游戏体验:胡桃工具箱. 工具箱介绍 胡桃工具箱是一款.NET开源(MIT Lice ...