SQL Expressions and Functions
|
expr ::=
|
expr binary-op expr |
expr [NOT] like-op expr [ESCAPE expr] |
unary-op expr |
( expr ) |
column-name |
table-name . column-name |
database-name . table-name . column-name |
literal-value |
parameter |
function-name ( expr-list | * ) |
expr ISNULL |
expr NOTNULL |
expr [NOT] BETWEEN expr AND expr |
expr [NOT] IN ( value-list ) |
expr [NOT] IN ( select-statement ) |
expr [NOT] IN [database-name
.] table-name |
[EXISTS]
( select-statement ) |
CASE [expr] ( WHEN expr THEN expr )+ [ELSE expr] END |
CAST ( expr AS type ) |
expr COLLATE collation-name
|
|
like-op ::=
|
LIKE | GLOB | REGEXP | MATCH
|
This section
is different from the others. Most other sections of this document talks about
a particular SQL command. This section does not talk about a standalone command
but about "expressions" which are subcomponents of most other
commands.
SQLite
understands the following binary operators, in order from highest to lowest precedence:
||
* /
%
+ -
<< >>
& |
< <=
> >=
= == !=
<> IN
AND
OR
Supported
unary prefix operators are these:
- +
! ~ NOT
The COLLATE
operator can be thought of as a unary postfix operator. The COLLATE operator
has the highest precedence. It always binds more tightly than any prefix unary
operator or any binary operator.
The unary
operator [Operator +] is a no-op. It can be applied to strings, numbers, or
blobs and it always gives as its result the value of the operand.
Note that
there are two variations of the equals and not equals operators. Equals can be
either = or ==. The non-equals operator can be either != or <>. The || operator is "concatenate" - it joins together the two strings
of its operands. The operator % outputs the remainder of its left operand modulo its right operand.
The result
of any binary operator is a numeric value, except for the || concatenation operator which gives
a string result.
A literal value is an integer number or a floating
point number. Scientific notation is supported. The "." character is
always used as the decimal point even if the locale setting specifies
"," for this role - the use of "," for the decimal point
would result in syntactic ambiguity. A string constant is formed by enclosing
the string in single quotes ('). A single quote within the string can be
encoded by putting two single quotes in a row - as in Pascal. C-style escapes
using the backslash character are not supported because they are not standard
SQL. BLOB literals are string literals containing hexadecimal data and preceded
by a single "x" or "X" character. For example:
X'53514697465'
A literal
value can also be the token "NULL".
A parameter
specifies a placeholder in the expression for a literal value that is filled in
at runtime using the sqlite3_bind API.
Parameters can take several forms:
|
?NNN
|
|
A question
mark followed by a number NNN holds a spot for the NNN-th parameter.
NNN must be between 1 and 999.
|
|
?
|
|
A question
mark that is not followed by a number holds a spot for the next unused
parameter.
|
|
:AAAA
|
|
A colon
followed by an identifier name holds a spot for a named parameter with the
name AAAA. Named parameters are also numbered. The number assigned is the
next unused number. To avoid confusion, it is best to avoid mixing named and
numbered parameters.
|
|
@AAAA
|
|
An
"at" sign works exactly like a colon.
|
|
$AAAA
|
|
A
dollar-sign followed by an identifier name also holds a spot for a named
parameter with the name AAAA. The identifier name in this case can include
one or more occurances of "::" and a suffix enclosed in
"(...)" containing any text at all. This syntax is the form of a
variable name in the Tcl programming language.
|
Parameters
that are not assigned values using sqlite3_bind
are treated as NULL.
The LIKE operator does a pattern matching comparison. The operand to the
right contains the pattern, the left hand operand contains the string to match
against the pattern. A percent symbol % in the pattern matches any sequence of zero or more
characters in the string. An underscore _ in the pattern matches any single character in the
string. Any other character matches itself or it's lower/upper case equivalent
(i.e. case-insensitive matching). (A bug: SQLite only understands upper/lower
case for 7-bit Latin characters. Hence the LIKE operator is case sensitive for
8-bit iso8859 characters or UTF-8 characters. For example, the expression 'a' LIKE 'A'
is TRUE but 'æ' LIKE 'Æ' is FALSE.).
If the
optional ESCAPE clause is present, then the expression following the ESCAPE
keyword must evaluate to a string consisting of a single character. This
character may be used in the LIKE pattern to include literal percent or
underscore characters. The escape character followed by a percent symbol,
underscore or itself matches a literal percent symbol, underscore or escape
character in the string, respectively. The infix LIKE operator is implemented
by calling the user function like(X,Y).
The LIKE
operator is not case sensitive and will match upper case characters on one side
against lower case characters on the other. (A bug: SQLite only understands
upper/lower case for 7-bit Latin characters. Hence the LIKE operator is case
sensitive for 8-bit iso8859 characters or UTF-8 characters. For example, the
expression 'a' LIKE 'A' is TRUE but 'æ' LIKE 'Æ'
is FALSE.).
The infix
LIKE operator is implemented by calling the user function like(X,Y). If an ESCAPE clause is
present, it adds a third parameter to the function call. If the functionality
of LIKE can be overridden by defining an alternative implementation of the
like() SQL function.
The GLOB operator is similar to LIKE but uses the Unix file globbing
syntax for its wildcards. Also, GLOB is case sensitive, unlike LIKE. Both GLOB
and LIKE may be preceded by the NOT keyword to invert the sense of the test.
The infix GLOB operator is implemented by calling the user function glob(X,Y) and can be modified by
overriding that function.
The REGEXP operator is a special syntax for the
regexp() user function. No regexp() user function is defined by default and so
use of the REGEXP operator will normally result in an error message. If a
user-defined function named "regexp" is added at run-time, that
function will be called in order to implement the REGEXP operator.
The MATCH operator is a special syntax for the match() user function.
The default match() function implementation raises an exception and is not
really useful for anything. But extensions can override the match() function
with more helpful logic.
A column
name can be any of the names defined in the CREATE TABLE statement or one of
the following special identifiers: "ROWID", "OID",
or "_ROWID_". These special identifiers all describe the
unique random integer key (the "row key") associated with every row
of every table. The special identifiers only refer to the row key if the CREATE
TABLE statement does not define a real column with the same name. Row keys act
like read-only columns. A row key can be used anywhere a regular column can be
used, except that you cannot change the value of a row key in an UPDATE or
INSERT statement. "SELECT * ..." does not return the row key.
SELECT
statements can appear in expressions as either the right-hand operand of the IN
operator, as a scalar quantity, or as the operand of an EXISTS operator. As a
scalar quantity or the operand of an IN operator, the SELECT should have only a
single column in its result. Compound SELECTs (connected with keywords like
UNION or EXCEPT) are allowed. With the EXISTS operator, the columns in the
result set of the SELECT are ignored and the expression returns TRUE if one or
more rows exist and FALSE if the result set is empty. If no terms in the SELECT
expression refer to value in the containing query, then the expression is
evaluated once prior to any other processing and the result is reused as
necessary. If the SELECT expression does contain variables from the outer
query, then the SELECT is reevaluated every time it is needed.
When a
SELECT is the right operand of the IN operator, the IN operator returns TRUE if
the result of the left operand is any of the values generated by the select.
The IN operator may be preceded by the NOT keyword to invert the sense of the
test.
When a
SELECT appears within an expression but is not the right operand of an IN
operator, then the first row of the result of the SELECT becomes the value used
in the expression. If the SELECT yields more than one result row, all rows
after the first are ignored. If the SELECT yields no rows, then the value of
the SELECT is NULL.
A CAST
expression changes the datatype of the into the type specified by <type>.
<type> can be any non-empty type name that is valid for the type in a
column definition of a CREATE TABLE statement.
Both simple
and aggregate functions are supported. A simple function can be used in any
expression. Simple functions return a result immediately based on their inputs.
Aggregate functions may only be used in a SELECT statement. Aggregate functions
compute their result across all rows of the result set.
Core Functions
The core
functions shown below are available by default. Additional functions may be
written in C and added to the database engine using the sqlite3_create_function() API.
|
abs(X)
|
Return the
absolute value of argument X.
|
|
coalesce(X,Y,...)
|
Return a
copy of the first non-NULL argument. If all arguments are NULL then NULL is
returned. There must be at least 2 arguments.
|
|
glob(X,Y)
|
This
function is used to implement the "X GLOB Y" syntax of
SQLite. The sqlite3_create_function()
interface can be used to override this function and thereby change the
operation of the GLOB operator.
|
|
ifnull(X,Y)
|
Return a
copy of the first non-NULL argument. If both arguments are NULL then NULL is
returned. This behaves the same as coalesce() above.
|
|
hex(X)
|
The
argument is interpreted as a BLOB. The result is a hexadecimal rendering of
the content of that blob.
|
|
last_insert_rowid()
|
Return the
ROWID of the last row insert from this connection to the database. This is
the same value that would be returned from the sqlite_last_insert_rowid()
API function.
|
|
length(X)
|
Return the
string length of X in characters. If SQLite is configured to support
UTF-8, then the number of UTF-8 characters is returned, not the number of
bytes.
|
|
like(X,Y)
like(X,Y,Z)
|
This
function is used to implement the "X LIKE Y [ESCAPE Z]"
syntax of SQL. If the optional ESCAPE clause is present, then the
user-function is invoked with three arguments. Otherwise, it is invoked with
two arguments only. The sqlite_create_function()
interface can be used to override this function and thereby change the
operation of the LIKE operator. When
doing this, it may be important to override both the two and three argument
versions of the like() function. Otherwise, different code may be called to
implement the LIKE operator depending on whether or not an ESCAPE clause was
specified.
|
|
load_extension(X)
load_extension(X,Y)
|
Load
SQLite extensions out of the shared library file named X using the
entry point Y. The result is a NULL. If Y is omitted then the
default entry point of sqlite3_extension_init is used. This function
raises an exception if the extension fails to load or initialize correctly.
|
|
lower(X)
|
Return a
copy of string X will all characters converted to lower case. The C
library tolower() routine is used for the conversion, which means that
this function might not work correctly on UTF-8 characters.
|
|
ltrim(X)
ltrim(X,Y)
|
Return a
string formed by removing any and all characters that appear in Y from
the left side of X. If the Y argument is omitted, spaces are
removed.
|
|
max(X,Y,...)
|
Return the
argument with the maximum value. Arguments may be strings in addition to
numbers. The maximum value is determined by the usual sort order. Note that max()
is a simple function when it has 2 or more arguments but converts to an
aggregate function if given only a single argument.
|
|
min(X,Y,...)
|
Return the
argument with the minimum value. Arguments may be strings in addition to
numbers. The minimum value is determined by the usual sort order. Note that min()
is a simple function when it has 2 or more arguments but converts to an
aggregate function if given only a single argument.
|
|
nullif(X,Y)
|
Return the
first argument if the arguments are different, otherwise return NULL.
|
|
quote(X)
|
This
routine returns a string which is the value of its argument suitable for
inclusion into another SQL statement. Strings are surrounded by single-quotes
with escapes on interior quotes as needed. BLOBs are encoded as hexadecimal
literals. The current implementation of VACUUM uses this function. The
function is also useful when writing triggers to implement undo/redo
functionality.
|
|
random(*)
|
Return a
pseudo-random integer between -9223372036854775808 and +9223372036854775807.
|
|
replace(X,Y,Z)
|
Return a
string formed by substituting string Z for every occurrance of string Y
in string X. The BINARY collating sequence is used for comparisons.
|
|
randomblob(N)
|
Return a N-byte
blob containing pseudo-random bytes. N should be a postive integer.
|
|
round(X)
round(X,Y)
|
Round off
the number X to Y digits to the right of the decimal point. If
the Y argument is omitted, 0 is assumed.
|
|
rtrim(X)
rtrim(X,Y)
|
Return a
string formed by removing any and all characters that appear in Y from
the right side of X. If the Y argument is omitted, spaces are
removed.
|
|
soundex(X)
|
Compute
the soundex encoding of the string X. The string "?000" is
returned if the argument is NULL. This function is omitted from SQLite by
default. It is only available the -DSQLITE_SOUNDEX=1 compiler option is used
when SQLite is built.
|
|
sqlite_version(*)
|
Return the
version string for the SQLite library that is running. Example:
"2.8.0"
|
|
substr(X,Y,Z)
|
Return a
substring of input string X that begins with the Y-th character
and which is Z characters long. The left-most character of X is
number 1. If Y is negative the the first character of the substring is
found by counting from the right rather than the left. If X is string
then characters indices refer to actual UTF-8 characters. If X is a
BLOB then the indices refer to bytes.
|
|
trim(X)
trim(X,Y)
|
Return a
string formed by removing any and all characters that appear in Y from
both ends of X. If the Y argument is omitted, spaces are
removed.
|
|
typeof(X)
|
Return the
type of the expression X. The only return values are "null",
"integer", "real", "text", and
"blob".
|
|
upper(X)
|
Return a
copy of input string X converted to all upper-case letters. The
implementation of this function uses the C library routine toupper()
which means it may not work correctly on UTF-8 strings.
|
|
zeroblob(N)
|
Return a
BLOB consisting of N bytes of 0x00. SQLite manages these zeroblobs very
efficiently. Zeroblobs can be used to reserve space for a BLOB that is later
written using incremental
BLOB I/O.
|
Date And
Time Functions
Date and
time functions are documented in the SQLite Wiki.
Aggregate Functions
The
aggregate functions shown below are available by default. Additional aggregate
functions written in C may be added using the sqlite3_create_function()
API.
In any
aggregate function that takes a single argument, that argument can be preceeded
by the keyword DISTINCT. In such cases, duplicate elements are filtered before
being passed into the aggregate function. For example, the function
"count(distinct X)" will return the number of distinct values of
column X instead of the total number of non-null values in column X.
|
avg(X)
|
Return the
average value of all non-NULL X within a group. String and BLOB values
that do not look like numbers are interpreted as 0. The result of avg() is
always a floating point value even if all inputs are integers.
|
|
count(X)
count(*)
|
The first
form return a count of the number of times that X is not NULL in a
group. The second form (with no argument) returns the total number of rows in
the group.
|
|
|