This chapter covers the elements that are common throughout the implementation of the SQL language — the expressions that are used to extract and operate on conditions about data and the predicates that test the truth of those assertions.
This chapter covers the elements that are common throughout the implementation of the SQL language — the expressions that are used to extract and operate on conditions about data and the predicates that test the truth of those assertions.
SQL expressions provide formal methods for evaluating, transforming and comparing values.SQL expressions may include table columns, variables, constants, literals, various statements and predicates and also other expressions.The complete list of possible tokens in expressions follows.
Identifier of a column from a specified table used in evaluations or as a search condition.A column of the array type cannot be an element in an expression except when used with the IS [NOT] NULL
predicate.
An expression may contain a reference to an array member i.e., <array_name>[s]
, where s
is the subscript of the member in the array <array_name>
The +
, -
, *
, /
characters used to calculate values
The ||
(“double-pipe”) operator used to concatenate strings
The reserved words NOT
, AND
and OR
, used to combine simple search conditions to create complex conditions
The symbols =
, <>
, !=
, ~=
, ^=
, <
, <=
, >
, >=
, !<
, ~<
, ^<
, !>
, ~>
and ^>
[fblangref50-commons-predlike], [fblangref50-commons-predstartwith], [fblangref50-commons-predcontaining], [fblangref50-commons-predsimilarto], [fblangref50-commons-predbetween], [fblangref50-commons-isnotnull], IS [NOT] {TRUE | FALSE | UNKNOWN}
and [fblangref50-commons-isnotdistinct]
Predicates used to check the existence of values in a set.The IN
predicate can be used both with sets of comma-separated constants and with subqueries that return a single column.The [fblangref50-commons-exists], [fblangref50-commons-singular], [fblangref50-commons-quant-all], [fblangref50-commons-quant-anysome] predicates can be used only with sub-queries.
Numbers, or string literals enclosed in apostrophes or Q-strings, Boolean values TRUE
, FALSE
and UNKOWN
, NULL
An expression, similar to a string literal enclosed in apostrophes, that can be interpreted as a date, time or timestamp value.Datetime literals can be strings of characters and numerals, such as TIMESTAMP '25.12.2016 15:30:35'
, that can be resolved as datetime value.
A string literal with a description of a desired datetime value that can be cast to a datetime type.For example 'TODAY'
, 'NOW'
.
An internally-defined context variable
Declared local variable, input or output parameter of a PSQL module (stored procedure, stored function, trigger, or unnamed PSQL block in DSQL)
A member of an ordered group of one or more unnamed parameters passed to a stored procedure or prepared query
A SELECT
statement enclosed in parentheses that returns a single (scalar) value or, when used in existential predicates, a set of values
The identifier of an internal, packaged, stored or external function in a function expression
An expression explicitly converting data of one data type to another using the CAST
function (CAST (<value> AS <datatype>)
).For datetime literals only, the shorthand syntax <datatype> <value>
is also supported (DATE '2016-12-25'
).
Expressions using CASE and related internal functions
Bracket pairs (…)
used to group expressions.Operations inside the parentheses are performed before operations outside them.When nested parentheses are used, the most deeply nested expressions are evaluated first and then the evaluations move outward through the levels of nesting.
COLLATE
clauseClause applied to CHAR and VARCHAR types to specify the character-set-specific collation to use in string comparisons
NEXT VALUE FOR sequence
Expression for obtaining the next value of a specified generator (sequence).The internal function GEN_ID()
does the same.
AT
expressionExpression to change the time zone of a datetime.
A literal — or constant — is a value that is supplied directly in an SQL statement, not derived from an expression, a parameter, a column reference nor a variable.It can be a string or a number.
A string literal is a series of characters enclosed between a pair of apostrophes (“single quotes”).The maximum length of a string literal is 32,765 for CHAR
/VARCHAR
, or 65,533 bytes for BLOB
;the maximum character count will be determined by the number of bytes used to encode each character.
Formally, the syntax of a normal string literal is:
<char-literal> ::= [<introducer> charset-name] <quote> [<char>...] <quote> [{ <separator> <quote> [<char>...] <quote> }... ] <separator> ::= { <comment> | <white space> } <introducer> ::= underscore (U+005F) <quote> ::= apostrophe (U+0027) <char> ::= character representation; apostrophe is escaped by doubling
Note
|
|
The character set of a string constant is assumed to be the same as the character set of its destined storage.
-- Literal containing single quote
select 'O''Reilly' from RDB$DATABASE;
-- output: O'Reilly
-- whitespace between literal
select 'ab'
'cd'
from RDB$DATABASE;
-- output: abcd
-- comment and whitespace between literal
select 'ab' /* comment */ 'cd'
from RDB$DATABASE;
-- output: abcd