Small. Fast. Reliable.
Choose any three.
内置标量SQL函数

1.概述

默认情况下,以下所示的核心功能可用。 日期和时间函数聚合函数窗口函数数学函数JSON函数分别记录在案。应用程序可以使用sqlite3_create_function() API定义用C编写并添加到数据库引擎的其他函数。

2.内置标量SQL函数的描述

绝对值(X

abs(X)函数返回数字参数X的绝对值。如果X为NULL,则Abs(X)返回NULL。如果X是无法转换为数值的字符串或Blob,则Abs(X)返回0.0。如果X是整数-9223372036854775808,则abs(X)会引发整数溢出错误,因为没有等效的正64位两个补码值。

变化()

changes()函数返回由最近完成的INSERT,DELETE或UPDATE语句更改,插入或删除的数据库行数,不包括低级触发器中的语句。changes()SQL函数是sqlite3_changes() C / C ++函数的包装,因此遵循相同的计数变化规则。

char(X1X2,...,XN

char(X1,X2,...,XN)函数返回一个字符串,该字符串由具有Unicode代码点值分别为整数X1到XN的字符组成。

合并(XY,...)

coalesce()函数返回其第一个非NULL参数的副本,如果所有参数均为NULL,则返回NULL。Coalesce()必须至少包含2个参数。

glob(XY

glob(X,Y)函数等效于表达式“ Y GLOB X ”。请注意,相对于中缀GLOB运算符,glob()函数中的X和Y参数是相反的。Y是字符串,X是模式。因此,例如,以下表达式是等效的:

     名称GLOB'*氦*'
     glob('* helium *',name)
  

如果使用sqlite3_create_function()接口使用替代实现覆盖glob(X,Y)函数,则GLOB运算符将调用替代实现。

十六进制(X

hex()函数将其参数解释为BLOB,并返回一个字符串,该字符串是该blob内容的大写十六进制表示形式。

如果“ hex(X)”中的参数X是整数或浮点数,则“将其参数解释为BLOB”意味着将二进制数首先转换为UTF8文本表示形式,然后将该文本解释为BLOB 。因此,“ hex(12345678)”呈现为“ 3132333435363738”,而不是整数值“ 0000000000BC614E”的二进制表示。

ifnull(XY

ifnull()函数返回其第一个非NULL参数的副本,如果两个参数均为NULL,则返回NULL。Ifnull()必须正好有2个参数。ifnull()函数等效于带有两个参数的coalesce()

iif(XYZ

如果X为true,则iif(X,Y,Z)函数返回值Y,否则返回Z。的IIF(X,Y,Z)函数在逻辑上等同于,并产生相同的 字节码CASE表达式“CASE WHEN X,则Y ELSEŽEND”。

instr(XY

instr(X,Y)函数在字符串X中查找字符串Y的第一个匹配项,并返回前一个字符的数量加1;如果在X中找不到Y,则返回0。或者,如果X和Y都是BLOB,则instr (X,Y)返回的值比第一次出现Y之前的字节数大;如果Y在X内的任何地方都没有出现,则返回0。如果instr(X,Y)的自变量X和Y均为非NULL且为而不是BLOB,那么两者都将解释为字符串。如果instr(X,Y)中X或Y为NULL,则结果为NULL。

last_insert_rowid()

last_insert_rowid()函数 从调用该函数的数据库连接返回最后一行插入的ROWID。last_insert_rowid()SQL函数是sqlite3_last_insert_rowid() C / C ++接口函数的包装 。

长度(X

对于字符串值X,length(X)函数返回第一个NUL字符之前的X中的字符数(不是字节)。由于SQLite字符串通常不包含NUL字符,因此length(X)函数通常将返回字符串X中的字符总数。对于Blob值X,length(X)返回Blob中的字节数。如果X为NULL,则length(X)为NULL。如果X是数字,则length(X)返回X的字符串表示形式的长度。

像(XY
像(XYZ

like()函数用于实现“ Y LIKE X [ESCAPE Z] ”表达式。如果存在可选的ESCAPE子句,则使用三个参数调用like()函数。否则,仅使用两个参数来调用它。请注意,like()函数中的X和Y参数相对于infix LIKE运算符是相反的。X是模式,Y是要与该模式匹配的字符串。因此,以下表达式是等效的:

     名称LIKE'%neon%'
     喜欢('%neon%',name)
  

所述sqlite3_create_function()接口可用于覆盖等()函数,从而改变的操作 LIKE运算符。覆盖like()函数时,同时覆盖like()函数的两个和三个参数版本可能很重要。否则,根据是否指定了ESCAPE子句,可以调用不同的代码来实现 LIKE运算符。

可能性(XY

似然性(X,Y)函数不变地返回参数X。似然性(X,Y)中的值Y必须是介于0.0和1.0之间(包括0.0和1.0)的浮点常量。似然性(X)函数是一种无操作,代码生成器会对其进行优化,以使其在运行时(即,在调用sqlite3_step()期间不占用任何CPU周期。似然的(X,Y)的目的的功能是提供一个提示来查询规划该参数X是一个布尔值,是真正用约Y的概率不可能的(X)函数是短手的可能性( X,0.0625)。的可能的(X)函数是短手的可能性(X,0.9375)。

可能的(X

可能的(X)函数返回参数X不变。可能的(X)函数是一个无操作函数,代码生成器会对其进行优化,以使其在运行时(即,在调用sqlite3_step()期间不占用任何CPU周期。可能的(X)函数的目的是向查询计划者提供提示,表明参数X是通常为true的布尔值。可能性(X)函数等效于可能性(X,0.9375)。另请参阅:不太可能(X)

load_extension(X
load_extension(XY

load_extension(X,Y)函数使用入口点Y从名为X的共享库文件中加载SQLite扩展。load_extension()的结果始终为NULL。如果省略Y,则使用默认入口点名称。如果扩展未能正确加载或初始化,load_extension()函数将引发异常。

如果扩展尝试修改或删除SQL函数或整理序列,则load_extension()函数将失败。该扩展可以添加新功能或整理序列,但不能修改或删除现有功能或整理序列,因为这些功能和/或整理序列可能在当前运行的SQL语句中的其他位置使用。要加载更改或删除函数或整理序列的扩展,请使用 sqlite3_load_extension() C语言API。

出于安全原因,加载的扩展名默认情况下处于关闭状态,并且必须通过事先调用sqlite3_enable_load_extension()来启用。

较低(X

lower(X)函数返回字符串X的副本,其中所有ASCII字符都转换为小写。默认的内置lower()函数仅适用于ASCII字符。要对非ASCII字符进行大小写转换,请加载ICU扩展名。

ltrim(X
ltrim(XY

ltrim(X,Y)函数返回一个字符串,该字符串是通过从X的左侧删除出现在Y中的任何和所有字符形成的。如果省略Y参数,则ltrim(X)将从X的左侧删除空格。

max(XY,...)

多参数max()函数返回具有最大值的参数,如果任何参数为NULL,则返回NULL。多参数max()函数从左到右搜索其参数,以找到定义整理函数并将该整理函数用于所有字符串比较的参数。如果max()的参数均未定义整理函数,则使用BINARY整理函数。请注意,当max()具有2个或更多参数时,它是一个简单函数,但如果仅给出单个参数,则它作为聚合函数运行 。

min(XY,...)

多参数min()函数返回具有最小值的参数。多参数min()函数从左到右搜索其参数,以定义一个定义整理函数的参数,并将该整理函数用于所有字符串比较。如果min()的参数均未定义整理函数,则使用BINARY整理函数。请注意,当min()具有2个或更多参数时,它是一个简单的函数;但是,如果仅给定单个参数,则它将作为一个 聚合函数

nullif(XY

如果参数不同,则nullif(X,Y)函数返回其第一个参数,如果参数相同,则返回NULL。nullif(X,Y)函数从左到右搜索其参数以查找定义整理函数并将该整理函数用于所有字符串比较的参数。如果nullif()的两个参数都未定义整理函数,则使用BINARY。

printf(FORMAT,...)

SQL函数printf(FORMAT,...)的功能类似于sqlite3_mprintf() C语言函数和标准C库中的printf()函数。第一个参数是格式字符串,它指定如何使用从后续参数获取的值构造输出字符串。如果FORMAT参数丢失或为NULL,则结果为NULL。%n格式将被静默忽略,并且不使用任何参数。%p格式是%X的别名。%z格式可以与%s互换。如果参数列表中的参数太少,则假定缺少的参数具有NULL值,对于数字格式,它将转换为0或0.0;对于%s,它将转换为空字符串。有关更多信息,请参见 内置的printf()文档。

报价(X

quote(X)函数返回SQL文字的文本,该文本是适合包含在SQL语句中的参数值。字符串被单引号引起来,并根据需要在内部引号上进行转义。BLOB被编码为十六进制文字。带有嵌入式NUL字符的字符串不能在SQL中表示为字符串文字,因此返回的字符串文字会在第一个NUL之前被截断。

随机的()

random()函数返回-9223372036854775808和+9223372036854775807之间的伪随机整数。

随机斑点(N

randomblob(N)函数返回一个包含伪随机字节的N字节Blob。如果N小于1,则返回1字节的随机Blob。

提示:应用程序可以使用此函数与hex()和/或 lower()一起生成全局唯一标识符,如下所示:

十六进制(randomblob(16))

较低(十六进制(randomblob(16)))

替换(XYZ

replace(X,Y,Z)函数返回一个字符串,该字符串是用字符串Z替换字符串X中每次出现的字符串Y所形成的字符串。BINARY 整理序列用于比较。如果Y为空字符串,则返回X不变。如果Z最初不是字符串,则在处理之前将其强制转换为UTF-8字符串。

圆(X
圆(XY

round(X,Y)函数返回一个浮点值X,该值四舍五入到小数点右边的Y位。如果省略Y参数,则假定为0。

rtrim(X
rtrim(XY

rtrim(X,Y)函数返回一个字符串,该字符串是通过从X的右侧删除出现在Y中的任何和所有字符形成的。如果省略Y参数,则rtrim(X)将从X的右侧删除空格。

符号(X

如果参数X是分别为负,零或正的数值,那么sign(X)函数将返回-1、0或+1。如果sign(X)的参数为NULL或不能无损地转换为数字的字符串或blob,则sign(X)返回NULL。

soundex(X

soundex(X)函数返回的字符串是字符串X的soundex编码。如果参数为NULL或不包含ASCII字母字符,则返回字符串“?000”。默认情况下,SQLite会省略此功能。仅当构建SQLite时使用SQLITE_SOUNDEX编译时选项时,此选项才可用。

sqlite_compileoption_get(N

sqlite_compileoption_get()SQL函数是对sqlite3_compileoption_get() C / C ++函数的包装 。此例程返回用于构建SQLite的第N个编译时选项;如果N超出范围,则返回NULL。另请参见compile_options pragma

sqlite_compileoption_used(X

sqlite_compileoption_used()SQL函数是对sqlite3_compileoption_used() C / C ++函数的包装 。当sqlite_compileoption_used(X)的参数X是一个字符串,它是编译时选项的名称时,此例程将返回true(1)或false(0),具体取决于在构建过程中是否使用了该选项。

sqlite_offset(X

sqlite_offset(X)函数返回数据库文件中记录要从中读取值的开头的字节偏移量。如果X不是普通表中的列,则sqlite_offset(X)返回NULL。sqlite_offset(X)返回的值可能引用原始表或索引,具体取决于查询。如果通常从索引中提取值X,则sqlite_offset(X)将偏移量返回到相应的索引记录。如果将从原始表中提取值X,则sqlite_offset(X)将偏移量返回到表记录。

只有使用-DSQLITE_ENABLE_OFFSET_SQL_FUNC编译时选项构建SQLite时,sqlite_offset(X)SQL函数才可用。

sqlite_source_id()

sqlite_source_id()函数返回一个字符串,该字符串标识用于构建SQLite库的源代码的特定版本。sqlite_source_id()返回的字符串是签入源代码的日期和时间,后跟该签入的SHA3-256哈希。该函数是sqlite3_sourceid() C接口的SQL包装器。

sqlite_version()

sqlite_version()函数返回正在运行的SQLite库的版本字符串。此函数是围绕sqlite3_libversion() C接口的SQL包装。

substr(XYZ
substr(XY
substring(XYZ
substring(XY

substr(X,Y,Z)函数返回输入字符串X的子字符串,该子字符串以第Y个字符开头,且长度为Z个字符。如果省略Z,则substr(X,Y)返回从字符串X的第Y个开始的所有字符。X的最左字符是数字1。如果Y为负,则通过从右而不是从左开始计数来找到子字符串的第一个字符。如果Z为负,则返回第Y个字符之前的abs(Z)字符。如果X是字符串,则字符索引是指实际的UTF-8字符。如果X是BLOB,则索引引用字节。

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

total_changes()

total_changes()函数返回自打开当前数据库连接以来,由INSERT,UPDATE或DELETE语句引起的行更改数。该函数是sqlite3_total_changes() C / C ++接口的包装。

修剪(X
修剪(XY

trim(X,Y)函数返回一个字符串,该字符串是通过从X的两端删除出现在Y中的所有字符组成的。如果省略Y参数,trim(X)将从X的两端删除空格。

typeof(X

typeof(X)函数返回一个字符串,该字符串指示表达式X的数据类型:“ null”,“ integer”,“ real”,“ text”或“ blob”。

unicode(X

unicode(X)函数返回与字符串X的第一个字符相对应的数字unicode代码点。如果unicode(X)的参数不是字符串,则结果不确定。

不太可能(X

不太可能的(X)函数返回参数X不变。不大可能(X)函数是一个无操作函数,代码生成器会对其进行优化,以使其在运行时(即,在调用sqlite3_step()期间不占用任何CPU周期。不可能的(X)函数的目的是向查询计划者提供一个提示,即参数X是一个布尔值,通常是不正确的。可能性函数(X)等于可能性(X,0.0625)。

上(X

upper(X)函数返回输入字符串X的副本,其中所有小写ASCII字符都转换为它们的大写等效字符。

零blob(N

zeroblob(N)函数返回一个BLOB,该BLOB由N个0x00字节组成。SQLite非常有效地管理这些零点。Zeroblob可用于为BLOB保留空间,该空间随后使用增量BLOB I / O写入 。此SQL函数是使用 C / C ++接口中的sqlite3_result_zeroblob()例程实现的。