SQLite 内置标量函数

SQLite 内置标量函数

abs(X)

返回数值参数 X 的绝对值。

如果 Xnull,则返回null。 如果 X 是无法转换为数值的字符串或blob,则返回 0.0。 如果 X 是整数 -9223372036854775808,将引发整数溢出错误。

示例

Select abs(-1.23) AS "绝对值"

返回结果

绝对值
1.23

changes()

返回最近完成的 INSERT、DELETE 或 UPDATE 语句更改、插入或删除的数据库行数,不包括较低级别触发器中的语句。

示例

--创建测试表
create table tCeShi(ID INTEGER, Name TEXT(50));
--插入单条数据
insert into tCeShi values(1, 'a');
--返回 1
select changes();
--批量插入数据
insert into tCeShi values(2, 'b'), (3, 'c'), (4, 'd'), (5, 'e');
--返回 4
select changes();
--删除数据
delete from tCeShi;
--返回 5
select changes();
--删除测试表
drop table tceshi;

char(X1,X2,...,XN)

返回分别由整数 X1XN 的 unicode 编码组成的字符串。

示例

Select char(49, 65, 97) AS "组成字符串"

返回结果

组成字符串
1Aa

coalesce(X,Y,...) ifnull(X,Y)

返回其第一个非 null 的参数,如果所有参数均为 null,则返回 null

ifnull() 函数等效于具有两个参数的 coalesce(),相当于SQLServer的ISNULL

示例

--创建测试表
create table tCeShi(ID INTEGER, Name TEXT(50));
--插入测试数据
insert into tCeShi values(1, 'a'), (2, null);
--查询
select ID, ifnull(Name, '空值') AS Name_ from tCeShi;
--或
select ID, coalesce(Name, '空值') AS Name_ from tCeShi;
--删除测试表
drop table tceshi;

返回结果

ID Name_
1 a
2 空值

format(FORMAT,...) printf(FORMAT,...)

格式化字符串。第一个参数是一个格式字符串,它指定如何使用从后续参数中获取的值来构造输出字符串。

printf()format()的别名。函数最初命名为 printf()。 但后来为了与其他数据库引擎兼容,该名称被更改为 format()。 原始名称printf()保留为别名,以免破坏任何遗留代码。

示例

Select printf('%.2f', 12.345) AS "格式化2位小数"

返回结果

格式化2位小数
12.35

glob(X,Y)

等价于表达式 Y GLOB X

相对于GLOB运算符glob() 函数中的 XY 参数是相反的。 Y 是字符串,X 是模式。

hex(X)

返回参数解释为blob内容的大写十六进制的字符串。

如果参数 X 是整数或浮点数,首先转换为 UTF8 文本表示,然后将该文本解释为blob。

示例

Select hex('测试') AS "blob内容", hex(123) AS "数字转换后blob内容"

返回结果

blob内容 数字转换后blob内容
E6B58BE8AF95 313233

iif(X,Y,Z)

如果 X 为真,则返回值 Y,否则返回值 Z

iif()函数在逻辑上等价于CASE表达式

instr(X,Y)

查找字符串 X 中第一次出现的字符串 Y 的位置索引,如果在 X 中找不到 Y,则返回 0。

如果 XY 都是 blob,则返回第一次出现 Y 的字节位置。

如果 XY 都是非 null 并且是不是 blob,则两者都被解释为字符串。

如果 XYnull,则返回 null

示例

Select instr('测试字符串内容', '字符') AS "字符位置"

返回结果

字符位置
3

last_insert_rowid()

返回数据库连接最后一行插入的ROWID

length(X)

返回 X 中第一个 NUL 字符之前的字符长度。由于字符串通常不包含 NUL 字符,因此通常会返回字符串中的字符总长度。

如果 X 为 blob,则返回字节数。

如果 Xnull,则返回 null

如果 X 为 数字,则返回 X 的字符串表示形式的长度。

对于字符串,字符长度始终与 UTF-16 字符串的字节长度不同,如果字符串包含多字节字符,则字符长度可能与 UTF-8 字符串的字节长度不同。

示例

Select length('测试字符串内容') AS "字符串长度"

返回结果

字符串长度
7

like(X,Y) like(X,Y,Z)

等价于表达式 Y LIKE X [ESCAPE Z]

如果存在可选的ESCAPE子句,则使用三个参数调用 like() 函数。 否则,只使用两个参数调用它。

相对于LIKE运算符like() 函数中的 XY 参数是相反的。 Y 是字符串,X 是模式。

load_extension(X) load_extension(X,Y)

加载 SQLite extensions

lower(X)

把字符串 X 中所有 ASCII 字符都转换为小写。

示例

Select lower('ABCabc') AS "转小写"

返回结果

转小写
abcabc

ltrim(X) ltrim(X,Y)

从字符串 X 的左侧删除 Y 中出现的字符。

如果省略 Y 参数,ltrim(X)将从 X 的左侧删除空格。

示例

Select ltrim('  abc') AS "删除左侧空格", ltrim('abbcdef', 'ab') AS "删除左侧字符"

返回结果

删除左侧空格 删除左侧字符
abc cdef

max(X,Y,...)

返回具有最大值的参数,如果任何参数为 null,则返回 null

max()具有2个或更多参数时,作为标量函数,只有一个参数时,则作为聚合函数。

min(X,Y,...)

返回具有最小值的参数。

min()具有2个或更多参数时,作为标量函数,只有一个参数时,则作为聚合函数。

nullif(X,Y)

如果参数不同,则返回第一个参数,如果参数相同,则返回 null

示例

Select nullif(1, '1') AS "参数不同", nullif(1, 1) AS "参数相同"

返回结果

参数不同 参数相同
1 null

quote(X)

返回SQL文字的文本(字符串被单引号包围,内部引号根据需要进行转义)。

如果 X 为 blob,blob被编码为十六进制文字。

包含 NUL 字符的字符串不能表示为SQL文字的文本,因此返回的SQL文字的文本在第一个 NUL 之前。

示例

数据

Code
abc
'_'

查询语句

Select Code, quote(Code) Code_ from tCeShi

返回结果

Code Code_
'abc' 'abc'
'''_''' '''_'''

random()

返回一个介于 -9223372036854775808 和 +9223372036854775807 之间的伪随机整数。

示例

Select random() AS "随机数", abs(random() % 100) AS "100以内随机数"

返回结果

随机数 100以内随机数
7094776304988828499 89

randomblob(N)

返回包含 N 个伪随机字节的blob。

如果 N 小于 1,则返回一个 1 字节的随机blob。

可以使用hex (randomlob(16)) 生成全局唯一标识符。

示例

select hex(randomblob(16)) AS "唯一标识符"

返回结果

唯一标识符
05C2B353FF0A1F6DC0E6BC7646D72805

replace(X,Y,Z)

把字符串 X 中出现的字符串 Y 替换为字符串 Z

如果 Y 是空字符串,则返回 X 不变。

如果 Z 不是字符串,则在处理之前将其转换为 UTF-8 字符串。

示例

select replace('abc-abc', 'abc', '字符') AS "替换后字符"

返回结果

替换后字符
字符-字符

round(X) round(X,Y)

将浮点值 X 四舍五入到小数点右侧的 Y 位。

如果 Y 参数被省略或为负,则认为是0。

示例

select round(12.345) "取整", round(12.345, 2) AS "保留2位"

返回结果

取整 保留2位
12 12.35

rtrim(X) rtrim(X,Y)

从字符串 X 的右侧删除 Y 中出现的字符。

如果省略 Y 参数,rtrim(X)将从 X 的右侧删除空格。

示例

Select rtrim('abc   ') AS "删除右侧空格", rtrim('abcdee', 'de') AS "删除右侧字符"

返回结果

删除右侧空格 删除右侧字符
abc abc

sign(X)

返回数字 X 的符号。

如果参数 Xnull,或者不能无损转换为数字,则 sign(X) 返回 null

示例

数据

Price
12.3
-3.5
0

查询语句

select Price, sign(Price) AS "函数值", case sign(Price) when 1 then '正数' when -1 then '负数' else '零' end AS "正负数" from tCeShi

返回结果

Price 函数值 正负数
12.3 1 正数
-3.5 -1 负数
0 0

soundex(X)

返回字符串 X 的 soundex 编码。

如果参数为 null 或不包含 ASCII 字母字符,则返回字符串?000

示例

Select soundex('sum') AS "发音编码1", soundex('sam') AS "发音编码2"

返回结果

发音编码1 发音编码2
S500 S500

sqlite_source_id()

返回构建SQLite库源代码的特定版本标识字符串。

sqlite_version()

返回正在运行的SQLite库的版本字符串。

substr(X,Y,Z) substr(X,Y) substring(X,Y,Z) substring(X,Y)

返回字符串 X 中从第 Y 个字符开始,长度为 Z 个字符的子字符串。

如果省略 Z 参数,则 substr(X,Y) 返回字符串 X 中从第 Y 个字符开始的所有字符。

如果 Y 是正数,从左侧计数来找子字符串,X 最左边字符的是索引1。如果 Y 是负数,从右侧计数来找子字符串,X 最右边字符的是索引-1

如果 Z 是正数,返回第 Y 个字符之后的字符。如果 Z 为负数,返回第 Y 个字符之前的字符。

如果 X 是字符串,索引指的是UTF-8 字符。 如果 X 是 blob,则索引指的是字节。

从SQLite版本 3.34 开始,substring()substr()的别名。

示例

Select substr('123456789', 5, 3) "从左侧取", substr('123456789', -5, 3) "从右侧取", substr('123456789', 5, -3) AS "向前取"

返回结果

从左侧取 从右侧取 向前取
567 567 234

total_changes()

返回自打开当前数据库连接以来由 INSERT、UPDATE 或 DELETE 语句更改、插入或删除的数据库行数。

trim(X) trim(X,Y)

从字符串 X 的两端删除 Y 中出现的字符。

如果省略 Y 参数,trim(X) 将从 X 的两端删除空格。

示例

Select trim(' abc ') AS "删除两端空格", trim('abbcdefa', 'ab') AS "删除两端字符"

返回结果

删除两端空格 删除两端字符
abc cdef

typeof(X)

返回表达式 X 的数据类型字符串(nullintegerrealtextblob)。

示例

Select typeof('2' + 2) AS "表达式数据类型"

返回结果

表达式数据类型
integer

unicode(X)

返回字符串 X 的第一个字符的 unicode 编码。

示例

Select unicode('A') AS "A的编码", unicode('abc') AS "a的编码"

返回结果

A的编码 a的编码
65 97

upper(X)

把字符串 X 中所有 ASCII 字符都转换为大写。

示例

Select upper('ABCabc') AS "转大写"

返回结果

转大写
ABCABC

zeroblob(N)

返回由 N 个字节的 0x00 组成的 blob。

参考

Built-In Scalar SQL Functions (sqlite.org)

posted @ 2022-12-26 12:28  txgh  阅读(349)  评论(0编辑  收藏  举报