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日)的运气; 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');

计量二〇一九年四月份的首先个周二:

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

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

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

HH:MM:SS

相关文章