常量
常量 (也称为字面量 )指定一个值。 常量分为空常量、字符串常量、数字常量或日期时间常量。 数字常量进一步分为整数、浮点数、十进制数或十进制浮点数。 字符常量分为字符常量、图形常量和二进制常量。
除了空常量之外,所有常量都具有NOT NULL属性。 数值常量中的负号在值为零时会被忽略。
常量(除了空常量)具有内置数据类型。 因此,当操作涉及常量和一种不同的类型时,需要将不同的类型转换为常量的内置数据类型,或者将常量转换为不同的类型。 例如,请参阅 “用户自定义类型比较 ”,其中包含一个将数据类型转换为常量与不同类型进行比较的示例。
空常数
常量空值表示空值。
常量NULL没有数据类型。 NULL关键字的数据类型由其使用的上下文提供,或者您可以使用CAST来指定数据类型。
整数常数
整数常量指定一个带符号或无符号的整数,最多包含19位数字,不包括小数点。
如果整型常量的值在整型常量的范围内,则其数据类型为整型常量。 如果整数常量的值超出大整数范围,但仍在大整数范围内,则其数据类型为大整数。 在大整数范围之外定义的常数被视为十进制常数。
例如,以下值是整数常量:
64 -15 +100 32767 720176
在语法图中, 整数一词用于指代不含符号的大整数常数。
浮点常数
浮点常数用两个用E分隔的数字来表示双精度浮点数。
第一个数字可以包含符号和小数点。 第二个数字可以包含符号,但不能包含小数点。 常量的值是以第一个数字, 乘以由第二个数字表示的10的幂次数。 它必须在浮点数范围内。 常量中的字符数不得超过30。 除去前导零,第一个数字的位数不得超过17,第二个数字的位数不得超过2。
15E1 2.E5 -2.2E-1 +5.E+2十进制常数
十进制常数是指不超过31位的有符号或无符号数,它要么包含小数点,要么不在二进制整数范围内。
精确度是指数字总数,包括小数点右边的数字(如果有)。 总数包括所有前导零和尾随零。 刻度是指小数点右侧的位数,包括末尾的零。
精确度是指数字总数,包括小数点右边的数字(如果有)。 总数包括所有前导零和尾随零。 刻度是指小数点右侧的位数,包括末尾的零。
025.50 1000. -15. +375893333333333333333.33十进制浮点常数
十进制浮点常数将十进制浮点数指定为两个用E分隔的数字。 第一个数字可以包含符号和小数点。 第二个数字可以包含符号,但不能包含小数点。
常量的值是以第一个数字, 乘以由第二个数字表示的10的幂次数。 该值必须在DECFLOAT(34)的范围内。 常量中的字符数不得超过42。 除去前导零,第一个数字的位数不得超过34,第二个数字的位数不得超过4。
当数值超出浮点常数的范围时,用E分隔的两个数字表示的常数才是十进制浮点常数。 一个常数,指定为一个不包含字母E且超过31位的数字,也是一个十进制浮点常数。
除了数字常量,以下特殊值可用于指定十进制浮点特殊值:
- INF或INFINITY——代表无穷大
- NAN——代表安静的非数字
- SNAN——表示非数字信号
特殊值可以是任何大小写字母的组合,也可以是操作符号(+或-)的前缀。
SNAN在数值运算中会产生警告或异常,而NAN则不会。 SNAN可用于非数值运算,不会产生警告或异常。 例如,SNAN可用于插入操作的VALUES列表中,或作为常量用于谓词中的比较。
当特殊值用于谓词时,优先顺序如下:
-NAN < -SNAN < -INFINITY < -0 < 0 < INFINITY < SNAN < NAN
123456789012345678E0 SNAN -INFINITY当某个特殊值用于可能被解释为标识符的上下文(例如列名)时,请将表示该特殊值的字符串常量转换为十进制浮点数。
CAST ('snan' AS DECFLOAT)
CAST ('INF' AS DECFLOAT)
CAST ('Nan' AS DECFLOAT)
字符串常量
字符串常量用于指定长度可变的字符串。 字符串常量有以下两种形式之一:
- 以字符串分隔符开头和结尾的字符序列,字符串分隔符可以是单引号(')或双引号(")。有关决定适用性的因素,请参阅单引号和双引号作为字符串分隔符。 这种形式的字符串常量指定了字符串分隔符之间包含的字符串。 分隔符之间的字节数不得超过32704。 32704这个限制指的是 UTF-8 字符串表示的长度(以字节为单位)。 如果您在 UTF-8 以外的CCSID(例如EBCDIC CCSID)中生成字符串,则 UTF-8 表示的长度可能与源CCSID中字符串表示的长度不同。 字符串中连续两个字符串分隔符表示一个字符串分隔符。
- 一个X后面跟着一系列字符,以字符串分隔符开头和结尾。 这种字符串常量形式也称为十六进制常量。 字符串分隔符之间的字符必须是偶数个十六进制数字。 十六进制数字不得超过32704。 十六进制数字是指数字或A到F之间的任意字母。 如果将混合数据子系统参数设置为“是”,则十六进制常数中的十六进制数字必须用大写字母表示。 否则,在处理SQL语句时可能会返回错误。 根据十六进制表示法,每对十六进制数字代表一个字符。 十六进制常量允许您指定没有键盘表示的字符。
以下示例为字符串常量。 示例中最右侧的字符串('')代表空字符串常量,即长度为0的字符串。
'12/14/1985' '32' 'DON''T CHANGE' X'FFFF' ''如果字符串常量包含DBCS子字符串,则该常量被归类为混合数据。 在其他情况下,字符串常量被归类为SBCS数据。 有关分配给常量的 CCSID 的信息,请参阅字符串的编码方案和 CCSID 规则。 混合字符串常量只能在一个字节字符之间断行。 无论字符串的内容是什么,Unicode字符串总是被视为混合字符串。
对于Unicode,字符常量可以分配给 UTF-8 和 UTF-16。 常数的形式并不重要。 通常情况下,字符串常量仅用于字符串,但它们也可以用于图形 UTF-16 数据。 然而,十六进制常量只是字符数据。 因此,用于将数据插入 UTF-16 数据字符串的十六进制常量应采用 UTF-8 格式,而非 UTF-16 格式。 例如,如果您想在 UTF-16 列中插入数字1,应使用 X'31' ,而不是 X'0031'。 尽管 X'0031' 是一个 UTF-16 值,但 Db2 将其视为两个单独的 UTF-8 代码点。 因此, X'0031' 将变为 X'00000031'。
二进制字符串常量
二进制字符串常量用于指定长度可变的二进制字符串。
二进制字符串常量由一个BX和一个以字符串分隔符开头和结尾的字符序列组成。 字符串分隔符之间的字符必须是偶数个十六进制数字。 十六进制数字不得超过32704。
十六进制数字是指数字或A到F之间的任何字母(大写或小写)。 根据十六进制表示法,每对十六进制数字代表一个字节。 请注意,这种表示法与使用 X'' 形式的字符常量的表示法类似;然而二进制字符串常量和字符串常量并不兼容,X'' 形式不能用于指定二进制字符串常量,就像 BX'' 形式不能用于指定字符串常量一样。
以下示例为二进制字符串常量:
BX'0000' BX'C141C242' BX'FF00FF01FF'
图形字符串常量
图形字符串常量用于指定长度可变的图形字符串。 更多信息,请参阅图形字符串常量。
日期时间常量
日期时间常量是特定格式的字符串常量。 更多信息,请参阅日期时间常量