常量

常量 (有时称为 文字) 指定一个值。 常量分类为空常量,字符串常量,数字常量,日期时间常量或布尔常量。 数字常量进一步分类为整数,浮点,十进制或十进制浮点。 字符串常量分类为字符,图形或二进制。

除空常量以外的所有常量都具有 NOT NULL 属性。

数字常量中的负零值 (-0) 与不带符号的零(0)具有相同的数值。

用户定义的类型具有强类型 ,弱类型的单值类型除外。 这意味着 强类型 用户定义的类型仅与其自己的类型兼容。 除空常量以外的常量具有内置数据类型。 因此,仅当用户定义的类型已强制转换为常量的内置类型,或者该常量已强制转换为用户定义的类型时,才可能执行涉及 强类型 用户定义的类型和常量的操作。 例如,使用 用户定义的类型比较中的表和单值类型,以下与常量 14 的比较有效:
   SELECT * FROM CAMP_DB_ROSTER
     WHERE AGE > CAST(14 AS YOUTH)
   SELECT * FROM CAMP_DB_ROSTER
     WHERE CAST(AGE AS INTEGER) > 14
以下比较是无效的:
   SELECT * FROM CAMP_DB_ROSTER
     WHERE AGE > 14

空常量

null 常量 指示 null 值。 空常量没有数据类型。 NULL 关键字的数据类型由使用它的上下文提供,或者您可以使用 CAST 来分配数据类型。

整数常量

整数常量 将整数指定为带符号或无符号的数字,最多包含 19 位数字,但不包含小数点。 整数常量的数据类型是大整数 (如果其值在大整数的范围内)。 如果整数常量的值在大整数范围之外但在大整数范围内,那么该整数常量的数据类型为大整数。 在大整数值范围之外定义的常量被视为十进制常量。

请注意,大整数常量的最小字面表示为 -2 ,而不是 -2 ,后者是整数值的上限。 同样,大整数常量最小的字面表示是 -9 ,而不是 -9 ,后者是大整数值的上限。

示例:
   64     -15     +100     32767     720176      12345678901

在语法图中,术语 integer 用于不能包含符号的大整数常量。

浮点常量

浮点常量 将浮点数指定为以 E 分隔的两个数字。 第一个数字可以包括符号和小数点; 第二个数字可以包括符号但不能包括小数点。 浮点常量的数据类型为双精度。 常量的值是第一个数字与第二个数字指定的 10 的幂的乘积; 它必须在浮点数的范围内。 常量中的字节数不得超过 30。

示例:
   15E1     2.E5     2.2E-1     +5.E+2

十进制常量

十进制常量 是由不超过 31 位数字组成的带符号或无符号数字,并且包含小数点或不在二进制整数的范围内。 它必须在十进制数的范围内。 精度为总位数 (包括前导零和尾随零); 小数位为小数点右边的位数 (包括尾随零)。

示例:
   25.5     1000.     -15.     +37589.3333333333

十进制浮点常量

除了十进制浮点特殊值 (解释为 DECFLOAT (34)) 之外,没有十进制浮点常量。

这些特殊值为 :INFINITY , NAN 和 SNAN。 INFINITY 表示无穷大,其量级为无穷大的数字。 INFINITY 前面可以有可选的符号。 可以指定 INF 来代替 INFINITY。 NAN 表示不是数字 (NaN) ,有时称为安静 NaN。 它是一个表示未定义结果的值 ,不会导致警告或异常。 SNAN代表NaNsNaN )。 如果在任何数字操作中定义的任何操作中使用,那么该值表示未定义的结果 ,这将导致警告或异常 。 NAN 和 SNAN 前面都可以有一个可选符号,但对于算术运算,该符号并不重要 SNAN 可以在非数字操作中使用,而不会导致警告或异常,例如在 INSERT 的 VALUES 列表中,或者在谓词中作为常量进行比较。
   SNAN   -INFINITY
当其中一个特殊值 (INFINITY , INF , NAN 或 SNAN) 在可解释为标识 (例如列名) 的上下文中使用时,将特殊值的字符串表示强制转换为十进制浮点数。 示例:
   CAST ('snan' AS DECFLOAT)
   CAST ('INF' AS DECFLOAT)
   CAST ('Nan' AS DECFLOAT) 

根据先前指定的规则,所有非特殊值都解释为整数,浮点或十进制常量。 要获取数字十进制浮点值,请使用带有字符串常量的 DECFLOAT 强制类型转换函数。 建议不要使用浮点常量作为 DECFLOAT 函数的自变量,因为浮点不精确,并且生成的十进制浮点值可能与组成自变量的十进制数字字符不同。 请改为使用字符常量作为 DECFLOAT 函数的自变量。

例如,DECFL '6.0221415E23', 34)返回十进制浮点值 6.0221415E+23 ,但DECFLOAT 6.0221415E23, 34)返回十进制浮点6.0221415000000003E+23。

字符串常量

字符串常量 指定类型为 VARCHAR 的变长字符串。 常量值字符串单元由环境缺省字符串单元确定。 字符串常量有三种形式:
  • 以字符串定界符 (即撇号 (')) 开头和结尾的字符序列。 字符串定界符之间的字节数不能大于 32672。 当环境字符串单元为 CODEUNITS32时,代码单元数不能大于 8168。 两个连续的字符串定界符用于表示字符串中的一个字符串定界符。 不包含在字符串中的两个连续字符串定界符表示空字符串。
  • X 后跟一系列以字符串定界符开头和结尾的字符。 这种形式的字符串常量也称为 十六进制常量。 字符串定界符之间的字符必须是偶数个十六进制数字。 将忽略字符串定界符之间的空格。 十六进制数字的数目不得超过 32672。 当环境字符串单元为 CODEUNITS32时,十六进制常量表示的代码单元数不能大于 8168。 十六进制数字是数字 0 到 9 或任何字母 A 到 F (大写或小写)。 根据十六进制表示法,每对十六进制数字代表一个字节。 常量在代码页中解释。 此格式的字符串常量允许您指定不具有键盘表示的字符。
  • U& 后面跟随一串字符,该字符序列以字符串分隔符开头并以字符串分隔符结尾,可选地后面跟随 UESCAPE 子句。 这种形式的字符串常量也称为 Unicode 字符串常量。 字符串定界符之间的字节数不能大于 32672。 当环境字符串单元为 CODEUNITS32时, Unicode 字符串常量表示的代码单元数不能大于 8168。 在语句编译期间, Unicode 字符串常量将从 UTF-8 转换为节代码页。 两个连续的字符串定界符用于表示字符串中的一个字符串定界符。 两个连续的 Unicode 转义 字符用于表示字符串中的一个 Unicode 转义 字符,但这些字符在计算字符常量的长度时计为一个字符。 不包含在字符串中的两个连续字符串定界符表示空字符串。 因为 UTF-8 中的字符范围从 1 到 4 字节,所以最大长度的 Unicode 字符串常量实际上可能表示少于 32672 个字符。

    字符可以由其 拼写字符 (glyph) 或其 Unicode 代码点表示。 Unicode字符的代码点范围从X'000000'到 X'10FFFF'。 要通过其代码点来表示 Unicode 字符,请使用后跟 4 十六进制数字的 Unicode 转义字符,或者使用后跟加号 (+) 和 6 十六进制数字的 Unicode 转义字符。 缺省 Unicode 转义字符是逆向 solidus (\) ,但可以使用 UESCAPE 子句指定另一个字符。 UESCAPE 子句被指定为 UESCAPE 关键字,后跟字符串定界符之间的单个字符。 Unicode 转义字符不能是加号 (+) ,双引号 ("),单引号 (') ,空格或任何字符 0 到 9 或 A 到 F (大写或小写) (SQLSTATE 42604)。 可以将拉丁大写字母 A 指定为 Unicode 代码点的两种方法的示例为 \0041 和 \ + 000041。

当常量值与数据库绑定时,会始终将其转换为数据库代码页。 它被视为在数据库代码页中。 因此,如果在将常量与 FOR BIT DATA 列组合在一起的表达式中使用,并且其结果为 FOR BIT DATA ,那么使用时将不会从其数据库代码页表示转换常量值。

示例:
'12/14/1985'    '32'    'DON''T CHANGE'    ''
X'FFFF'    X'46 72 61 6E 6B'
U&'\0141ód\017A is a city in Poland'   U&'c:\\temp'   U&'@+01D11E' UESCAPE '@'
示例中第二行上最右边的字符串表示 ASCII 字符串 Frank的 VARCHAR 模式。 最后一行对应于: 罗兹是波兰的一个城市c:\temp以及表示音乐符号 G clef 的单个字符。

图形字符串常量

图形字符串常量 指定类型为 VARGRAPHIC 的变长图形字符串。
UTF-16 BE 图形字符串常量

支持指定可变长度 UTF-16 BE 图形字符串常量的十六进制 UTF-16 BE 图形字符串。 十六进制 UTF-16 BE 图形字符串常量的格式为 :UX 后跟一系列以撇号开头和结尾的字符。 撇号之间的字符必须是 4 个十六进制数字的偶数倍。 十六进制数字的数目不得超过 16336; 否则,将返回错误 (SQLSTATE 54002)。 如果十六进制 UTF-16 BE 图形字符串常量格式不正确,那么将返回错误 (SQLSTATE 42606)。 每组四位数表示单个 UTF-16 BE 图形字符。

示例:
   UX'0042006F006200620079'
表示 ASCII 字符串 Bobby的 VARGRAPHIC 模式。
非 Unicode 数据库
在非 Unicode 数据库中,图形字符串常量由以单字节撇号 (') 开头和结尾且以单字节 G 或 N 开头的双字节字符序列组成。 撇号之间的字符必须表示偶数个字节,图形字符串的长度不得超过 16336 个双字节。 撇号不能作为 MBCS 字符的一部分出现以被视为定界符。 例如:
   G'double-byte character string'
   N'double-byte character string'
Unicode 数据库
在 Unicode 数据库中,图形字符串常量由一系列字符组成,这些字符以撇号 (') 开头和结尾,前面有一个 G 或 N 字符。 常量值字符串单元由环境缺省字符串单元确定。 撇号之间的字符将转换为代码页 1200 ,图形字符串的长度不得超过 16336 个双字节。 当环境字符串单元为 CODEUNITS32时,代码单元数不得超过 8168。

在Unicode 或双字节编码 数据库中, 十六进制图形字符串常量,用于指定长度可变的图形字符串。 十六进制图形字符串常量的格式为 :GX 后跟以撇号开头和结尾的字符序列。 撇号之间的字符必须是 4 个十六进制数字的偶数倍。 十六进制数字的数目不得超过 32 672。 当环境字符串单元为 CODEUNITS32 时,十六进制图形字符串常量所代表的代码单元数不得超过8168;否则将返回错误(SQLSTATE 54002)。 如果十六进制图形字符串常量的格式不正确,那么将返回错误 (SQLSTATE 42606)。 每四位数一组,代表 DBCS代码页中一个图形字符。 在Unicode数据库中,这将是单个 UTF-16 图形字符。

示例:
   GX'FFFF'
表示 Unicode 数据库中的位模式 "111111111111111111"。
   GX'005200690063006B'
表示 Unicode 数据库中 ASCII 字符串 Rick 的 VARGRAPHIC 模式。

二进制字符串常量

二进制字符串常量指定类型为 VARBINARY 的变长二进制字符串。

通过指定后跟以字符串定界符开头和结尾的字符序列的 BX 来构成二进制字符串常量。 字符串定界符之间的字符必须是偶数个十六进制数字。 十六进制数字的数目不得超过 32672。

十六进制数字是数字 0-9 或任何字母 A 到 F (大写或小写)。 在十六进制表示法约定下,每对十六进制数字表示 1 字节。 此表示类似于使用 X'' 形式的字符常量的表示。 但是,二进制字符串常量和字符串常量不兼容, X'' 格式不能用于指定二进制字符串常量,正如 BX'' 格式不能用于指定字符串常量一样。

二进制字符串常量示例:
BX'0000'
BX'C141C242'
BX'FF00FF01FF'

日期时间常量

日期时间常量 指定日期,时间或时间戳记。

通常,字符串常量用于表示赋值和比较中的常量日期时间值。 但是,可以在字符串常量 的特定格式之前使用关联的数据类型名称,以将该常量特别表示为日期时间常量而不是字符串常量。 三个日期时间常量的格式为:
DATE 'yyyy-mm-dd'
该值的数据类型为 DATE。
TIME 'hh:mm:ss'
TIME 'hh:mm'
值的数据类型为 TIME。
TIMESTAMP 'yyyy-mm-dd hh:mm:ss.nnnnnnnnnnnn'
TIMESTAMP 'yyyy-mm-dd-hh.mm.ss.nnnnnnnnnnnn'
其中,小数秒数的位数可以从 0 到 12 不等,如果没有小数秒数,那么可以省略句点字符。 该值的数据类型为 TIMESTAMP (p) ,其中 p 是小数秒数的位数。
在每个日期时间常量中,可以从字符串常量部分的月,日和小时部分中省略前导零 (如果适用)。 对于 TIME 或 TIMESTAMP 常量的分钟和秒元素,必须包含前导零字符。 可以包括并忽略尾部空格。

布尔常量

布尔常量指定关键字 TRUE 或 FALSE ,这表示相应的真值。 可以使用 CAST (NULL AS BOOLEAN) 指定未知真值。