ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQLite 常用 SQL

2021-05-30 13:04:14  阅读:134  来源: 互联网

标签:... SQLite 01 MM 修饰符 常用 SELECT SQL strftime


SQLite 常用 SQL SQLite 常用 SQL
UPDATE ciauthor set  name='作者介绍:'||name
insert into atb (id,name,info) 
select ciauthor.value+64051,ciauthor.name,ciauthor.long_desc from ciauthor 

insert into atb (id,name,info) 
select ci.value+65641,ci.rhythmic||'-'||ci.author,ci.content
from ci 

insert into atb (id,name,info) 
select 86691+ROWid, aa.title||'-'||aa.author,aa.paragraphs from aa 

insert into atb (id,name,info) 
select 97748+ROWid, '幽梦影-张潮'||ROWid, aa.content||'---'||aa.comment from aa 
--VACUUM

insert into atb (id,name,info) 
select 98415+ rowID, aax.title||'--'||aax.author
,aax.notes||'--'||aax.paragraphs  from aax

--insert into atb (id,name,info) 
select 99513+ROWid
, Sheet1.title||'--'||Sheet1.author,Sheet1.paragraphs from Sheet1 

 


--1.将表名改为临时表

ALTER TABLE "Student" RENAME TO "_Student_old_20140409"

--2.创建新表

CREATE TABLE "Student" (

"Id"  INTEGER PRIMARY KEY AUTOINCREMENT,

"Name"  Text)3

-.导入数据

INSERT INTO "Student" ("Id", "Name") SELECT "Id", "Title" FROM "_Student_old_20140409";


【SQLite】select into 语句

sqlite不支持类似sqlserver中的select into 语法

将一个表中的数据复制到一个新表中,可以这样写:

CREATE TABLE newtable AS SELECT * FROM oldtable

 

主键自增

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

CREATE TABLE [Test] (
  [Id] INTEGER PRIMARY KEY  AUTOINCREMENT,  -- 自增
  [Name] NVARCHAR(20) NOT NULL
);
INSERT INTO ToDoListTable VALUES(null, 'aaa',0)//自增列  值 为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 发表于 2012-05-03 18:34  涂磊  阅读(320)  评论(0)  编辑  收藏

主键自增

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

CREATE TABLE [Test] (
  [Id] INTEGER PRIMARY KEY  AUTOINCREMENT,  -- 自增
  [Name] NVARCHAR(20) NOT NULL
);
INSERT INTO ToDoListTable VALUES(null, 'aaa',0)//自增列  值 为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

标签:...,SQLite,01,MM,修饰符,常用,SELECT,SQL,strftime
来源: https://blog.51cto.com/u_15216366/2833236

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有