SQLite 常用 SQL

SQLite 常用 SQL

主键自增

创办表时将主键列设置为 INTEGER PRIMARY KEY , 例如:

CREATE TABLE [Test] (
  [Id] INTEGER PRIMARY KEY, 
  [Name] NVARCHAR(20) NOT NULL
);

终极插入的行号

查阅最后插入的行号是因此 last_insert_rowid() 函数, 与 SQL Server 的
@@Identity 类似,例如:

INSERT INTO [Test] (Name)
VALUES ('Test')
SELECT LAST_INSERT_ROWID()

连日来两只字符串

拿有限独字符串连接起来用 || , 例如:

INSERT INTO [Test] (Name)
VALUES ('Test_' || CAST(LAST_INSERT_ROWID() AS NVARCHAR(10)));

日期和时间

SQLite 支持下 5 个日子及时光函数:

  • date(timestring, modifier, modifier, …)
  • time(timestring, modifier, modifier, …)
  • datetime(timestring, modifier, modifier, …)
  • julianday(timestring, modifier, modifier, …)
  • strftime(format, timestring, modifier, modifier, …)

立马 5 只函数都领受一个时光字符串作为参数, 紧跟着的凡可选的修饰符。
strftime 函数还接受一个格式化字符串作为其的率先独参数。

这些时间日期函数使用 ISO-8601 规定的时刻日期格式的子集, date 函数返回
YYYY-MM-DD 格式的日期, time 函数返回 HH:MM:SS 格式的日子, 而 datetime
则赶回 “YYYY-MM-DD HH:MM:SS” 格式的日子时; julianday
函数则回从儒略日(公元前4713年1月1日)的命; strftime
返回的格式则由该参数决定, 下面是 strftime 可以接受之参数格式:

  • %d    day of month: 00
  • %f    fractional seconds: SS.SSS
  • %H    hour: 00-24
  • %j    day of year: 001-366
  • %J    Julian day number
  • %m    month: 01-12
  • %M    minute: 00-59
  • %s    seconds since 1970-01-01
  • %S    seconds: 00-59
  • %w    day of week 0-6 with Sunday==0
  • %W    week of year: 00-53
  • %Y    year: 0000-9999
  • %%    %

拥有的日期时函数都得以就此 strftime 函数表示,
提供这些函数的绝无仅有原因是为着便于与迅速, 例如:

date(…) strftime(‘%Y-%m-%d’, …)
time(…) strftime(‘%H:%M:%S’, …)
datetime(…) strftime(‘%Y-%m-%d %H:%M:%S’, …)
julianday(…) strftime(‘%J’, …)

然而领之时光字符串

  1. YYYY-MM-DD
  2. YYYY-MM-DD HH:MM
  3. YYYY-MM-DD HH:MM:SS
  4. YYYY-MM-DD HH:MM:SS.SSS
  5. YYYY-MM-DDTHH:MM
  6. YYYY-MM-DDTHH:MM:SS
  7. YYYY-MM-DDTHH:MM:SS.SSS
  8. HH:MM
  9. HH:MM:SS
  10. HH:MM:SS.SSS
  11. now
  12. DDDDDDDDDD

在第 5 至第 7 单格式中, “T” 是 ISO-8601 规定的日子时隔符; 第 8 至
第 10 单格式中单单声明了光阴, 其相应之日子也 2000-01-01 ; 第 11 单格式
‘now’ 表示于网得到的当前 UTC 时间; 第 12
个格式则象征于儒略日从底日期数。

修饰符

光阴字符串可以和多单可选的修饰符来对日开展调,
每个修饰符是指向该左侧时间值得一个更换, 从左到右依次以, 顺序很重大。
可用之修饰符如下:

  1. NNN days
  2. NNN hours
  3. NNN minutes
  4. NNN.NNNN seconds
  5. NNN months
  6. NNN years
  7. start of month
  8. start of year
  9. start of day
  10. weekday N
  11. unixepoch
  12. localtime
  13. utc

前 6 只修饰符用于往日字符串或修饰符指定的日子时增长指定数量之辰。
注意 “±NNN months” 的行事章程是: 先将原先的日期渲染成 YYYY-MM-DD 格式,
对月增长 ±NNN 的价值, 然后还对结果开展修正。 如果 2001-03-31 添加了 ‘+1
month’ 修饰符, 则应先得到 2001-04-31 , 由于 4 月只发 30 天,
所以结果碰头叫修正为 2001-05-01 。 如果向闰年的 2 月 29 日添加了 ‘±N
years’ 修饰符, 当 N 不是 4 的倍数时, 也会起这么的匡正。

第 7 到 9 的那些 “start of” 修饰符将日期变为眼前日、 月、
年的开头日。

修饰符 “weekday” 将日期为后推进直到下一致到家的指定天数。 星期天是 0 ,
星期一凡 1 , 依此类推。

第 11 单修饰符 “unixepoch” 只有当日期格式为 “DDDDDDDDDD” 时才行, 将
unix 时间戳转换成日, 由于参数是 64 位整数, 因此, 有效地日限制是
0000-01-01 00:00:00 至 5352-11-01 10:52:47 (Unix 时间 -62167219200 至
10675199167)

修饰符 “localtime” 将 utc 时间更换为本地时间, “utc” 则相反。

示例

计时日子:

SELECT date('now');

算时月的末尾一天:

SELECT date('now','start of month','+1 month','-1 day');

计算为定 unix 时间穿对应之日子时:

SELECT datetime(1092941466, 'unixepoch');

计为定 unix 时间穿对应的日期时并转移成当地时间:

SELECT datetime(1092941466, 'unixepoch', 'localtime');

计量时之 unix 时间戳:

SELECT strftime('%s','now');

算起美国单身及现之数:

SELECT julianday('now') - julianday('1776-07-04');

算算起2004年某时刻到今日的秒数:

SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');

计量今年10月份底第一单星期三:

SELECT date('now','start of year','+9 months','weekday 2');

测算 unix 时间纪元到本底秒数(与 strftime(‘%s’,’now’) 类似,
包含小数部分):

SELECT (julianday('now') - 2440587.5)*86400.0;

HH:MM:SS

相关文章