Skip to content

适用虚谷数据库版本

v12.10.8



适用虚谷数据库版本

v12.10.8


字面量(Literal)

📄字数 3.6K
👁️阅读量 加载中...

一、概述

术语 “文字” 和 “常量值” 是同义词,指的是固定的数据值。

虚谷数据库支持以下字面量:

  • 文本字面量
  • 数值字面量
  • 日期和时间字面量
  • 间隔字面量
  • 位值字面量
  • 十六进制字面量
  • 空值
  • 布尔字面量

例如,'XUGU''DATABASE''101'都是字符文字;5001 是数字文字。
字符文字用单引号括起来,以便将其与模式对象名称区分开来。

二、文本字面量 (Text Literals)​

定义​:

文本字面量是使用单引号' '引起来的字符串,用来在表达式、条件、SQL 函数、SQL 语句中指定字符串的值。
文本字面量本身具有 CHAR数据类型的属性。

语法:

参数说明:​​

  • ​单引号作为分隔符时:​​
    • char 是用户字符集中的任何字符。
    • 要在字面量中表示一个单引号,请输入两个单引号'',或使用转义字符。
  • ​使用Qq 替代单引号作为分隔符时:​​
    • 最外层的 ' '是分别位于开头 delimiter 之前和结尾 delimiter 之后的两个单引号。
    • char 是用户字符集中的任何字符。
      • 可以包含引号' "
      • delimiter 后面没有单引号,可以包含 delimiter 本身。
    • delimiter[, {, <, '\' 或 ( 之一,结尾的 delimiter 必须分别是 ], }, >, '\' 或 )

示例:

sql

SQL> SELECT '这是文本' FROM dual;
Reconnect ok.

+----------+
|  EXPR1   |
+----------+
| 这是文本 |
+----------+

SQL> SELECT q'<abcd1>' FROM dual;

+-------+
| EXPR1 |
+-------+
| abcd1 |
+-------+

SQL> SELECT Q'{defa3}' FROM dual;

+-------+
| EXPR1 |
+-------+
| defa3 |
+-------+

三、数值字面量 (Numeric Literals)​

定义:

数值字面量用于指定定点数和浮点数的值。

用法:

当表达式、条件、SQL 函数和 SQL 语句中出现数字时,需要用数字字面量来指定值。

语法:

参数说明:

  • +- 表示正值或负值。如果省略符号,则默认为正值。
  • digit0, 1, 2, 3, 4, 5, 6, 7, 8, 9 之一。

四、日期时间字面量 (Datetime Literals)​

定义:

日期时间字面量是使用单引号' '引起来的字符串,用来在表达式、条件、SQL 函数、SQL 语句中指定日期时间类型的值。

语法:

参数说明:

  • SCONST 是日期时间字符串;
  • opt_with_timez 是指定目标数据类型是否包含时区信息的关键字。

补充说明:

TIMESTAMP SCONST 用法中,若日期时间字符串包含时区信息,Oracle 兼容模式与其他兼容模式返回结果不同,在 Oracle 兼容模式下,返回数据类型为包含时区信息的 DATETIME WITH TIME ZONE ,其他兼容模式下则忽略字符串中的时区信息,返回 DATETIME 类型。

示例:

sql

SQL> SELECT DATE '2025-10-22' FROM dual;

+------------+
|   EXPR1    |
+------------+
| 2025-10-22 |
+------------+

SQL> SELECT TIME '10:59:25.952' FROM dual;

+--------------+
|    EXPR1     |
+--------------+
| 10:59:25.952 |
+--------------+

SQL> SELECT TIME WITH TIME ZONE '10:59:25.952+08:00' FROM dual;

+--------------------+
|       EXPR1        |
+--------------------+
| 10:59:25.952 +08:00|
+--------------------+

SQL> SELECT TIMESTAMP '2025-10-22 10:59:25.952' FROM dual;

+-------------------------+
|          EXPR1          |
+-------------------------+
| 2025-10-22 10:59:25.952 |
+-------------------------+

SQL> SELECT TIMESTAMP WITH TIME ZONE '2025-10-22 10:59:25.952+08:00' FROM dual;

+-------------------------------+
|             EXPR1             |
+-------------------------------+
| 2025-10-22 10:59:25.952 +08:00|
+-------------------------------+

五、区间字面量 (Interval Literals)​

定义:

区间字面量指定一个时间段。可以用年和月来指定这些差异,也可以用天、小时、分钟和秒来指定。

虚谷数据库支持多种类型的间隔文字,每种类型都包含一个前导字段,并且可能包含一个尾随字段。前导字段定义被测量日期或时间的基本单位。
尾随字段定义被考虑的基本单位的最小增量。

语法:

参数说明:​​

  • time:指定日期的数字,要求为整数。
  • time_expr指定 HH [ : MI [ : SS [ . n ]]]MI [ : SS [ . n ]] 或 SS [ . n ]格式的时间,其中 n 指定秒的小数部分。
  • leading_precision是前导字段的位数。
  • seconds_precisionSECOND日期时间字段小数部分的位数。

precision的取值参考时间间隔类型

示例:

SQL
SQL> SELECT INTERVAL '100' YEAR(3) FROM dual;

+------------+
|   EXPR1    |
+------------+
|        100 |
+------------+

SQL> SELECT INTERVAL '3' MONTH FROM dual;

+------------+
|   EXPR1    |
+------------+
|          3 |
+------------+

SQL> SELECT INTERVAL '1-3' YEAR TO MONTH FROM dual;

+--------------+
|    EXPR1     |
+--------------+
|         1-03 |
+--------------+

SQL> SELECT INTERVAL '7' DAY FROM dual;

+------------+
|   EXPR1    |
+------------+
|          7 |
+------------+

SQL> SELECT INTERVAL '3 04' DAY TO HOUR FROM dual;

+-------------+
|    EXPR1    |
+-------------+
|        3 04 |
+-------------+

SQL> SELECT INTERVAL '2 12:30' DAY TO MINUTE FROM dual;

+---------------+
|     EXPR1     |
+---------------+
|       2 12:30 |
+---------------+

SQL> SELECT INTERVAL '1 01:01:01' DAY TO SECOND FROM dual;

+-------------------------+
|          EXPR1          |
+-------------------------+
|       1 01:01:01.000000 |
+-------------------------+

SQL> SELECT INTERVAL '1 01:01:01.123' DAY TO SECOND(3) FROM dual;

+-------------------------+
|          EXPR1          |
+-------------------------+
|       1 01:01:01.123000 |
+-------------------------+

SQL> SELECT INTERVAL '12:30' HOUR TO MINUTE FROM dual;

+-------------+
|    EXPR1    |
+-------------+
|       12:30 |
+-------------+

SQL> SELECT INTERVAL '30' MINUTE FROM dual;

+------------+
|   EXPR1    |
+------------+
|         30 |
+------------+

SQL> SELECT INTERVAL '5.678' SECOND(3) FROM dual;

+-------------------+
|       EXPR1       |
+-------------------+
|          5.678000 |
+-------------------+

六、位值字面量(Bit-Value Literals)

定义:

位值字面量使用b'val'表示法来书写。val是使用 0 和 1 书写的二进制值。

语法:

参数说明: val为数字 0 或者 1。

示例:

SQL
SQL> select b'1011', B'1101' FROM dual;

+------------+------------+
| EXPR1(BIT) | EXPR2(BIT) |
+------------+------------+
| b'1011'    | b'1101'    |
+------------+------------+

空的位值(b'')求值为零长度的二进制字符串。转换为数字时,结果为0:

sql
SQL> SELECT LENGTH(B''), LENGTH(b'') FROM dual;

+----------------+----------------+
| EXPR1(INTEGER) | EXPR2(INTEGER) |
+----------------+----------------+
| 0              | 0              |
+----------------+----------------+

七、十六进制字面量(Hexadecimal Literals)

定义:

十六进制文字值使用X'val'表示法书写,其中val包含十六进制数字(0..9、A..F、a..f)

默认情况下,十六进制文字是一个二进制字符串,其中每对十六进制数字代表一个字符。书写包含奇数个数字的十六进制字面量,会被视为有一个额外的前导 0。例如 X'abc' 等于 X'0abc'

语法:

参数说明: val为十六进制数字(0..9、A..F、a..f)

示例:

sql
SQL> SELECT HEX(X'01AF'), HEX(X'01af'), HEX(x'01AF'), HEX(x'01af') FROM dual;

+-------+-------+-------+-------+
| EXPR1 | EXPR2 | EXPR3 | EXPR4 |
+-------+-------+-------+-------+
| 01AF  | 01AF  | 01AF  | 01AF  |
+-------+-------+-------+-------+

空十六进制值(X'')的计算结果为零长度二进制字符串。转换为数字时,结果为0:

sql
SQL> select LENGTH(x'') FROM dual;

+-------+
| EXPR1 |
+-------+
| 0     |
+-------+

八、空值字面量(NULL Values)

定义:

NULL值表示“无数据”。NULL可以用任何大小写形式书写。

说明:

  1. NULL 值与数值类型的 0 或字符串类型的空字符串等值不同。
  2. 对于使用ORDER BY进行排序,NULL值在升序排序时排在其他值之前,在降序排序时排在其他值之后。
  3. NULL在特定的函数中使用需要指定类型,否则会导致无法正确调用函数。NULL:CHAR

九、布尔字面量(Boolean Literals)

定义:

常量TRUEFALSE等于 1 和 0,它是大小写不敏感的。

示例:

sql
SQL> SELECT TRUE, true, tRuE, FALSE, FaLsE, false FROM dual;

+-------+-------+-------+-------+-------+-------+
| EXPR1 | EXPR2 | EXPR3 | EXPR4 | EXPR5 | EXPR6 |
+-------+-------+-------+-------+-------+-------+
| T     | T     | T     | F     | F     | F     |
+-------+-------+-------+-------+-------+-------+