Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


字面量(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)​

虚谷数据库支持四种日期时间数据类型:DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE

4.1 DATE字面量

DATE字面量可以通过字符串指定,或者可以使用 TO_DATE 函数将字符或数字值转换为日期值。

用法:

  • 使用DATE 值指定日期字面量:

    SQL
    DATE('2025-07-25')
  • 使用to_date生成指定日期值格式的字面量:

    SQL
    TO_DATE('2025-07-25 15:35:30', 'YYYY-MM-DD HH24:MI:SS')

4.2 TIMESTAMP字面量

TIMESTAMP数据类型存储了年、月、日、时、分、秒和小数秒值的值。

如下所示:

SQL
TIMESTAMP('2025-07-25 12:36:52.421')

4.3 TIMESTAMP WITH TIME ZONE字面量

TIMESTAMP WITH TIME ZONE数据类型是 TIMESTAMP 的一个变体,它包含时区区域名称或时区偏移量。

如下所示:

SQL
TIMESTAMP('2025-07-25 12:36:52.421 +08:00')

当两个TIMESTAMP WITH TIME ZONE字面量中的值表示 GMT 时区的同一时刻,那么尽管它们的时区字段的值不同,它们也被视为相同的字面量。

如以下示例所示,GMT-8 时区的早上 8 点和 GMT-5 时区的早上11点其实是同一时刻:

SQL
TIMESTAMP('2025-07-25 08:00:00 -08:00')
TIMESTAMP('2025-07-25 11:00:00 -05: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     |
+-------+-------+-------+-------+-------+-------+