Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


类型转换表达式

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

概述

类型转换表达式用于将一个数据值从一种数据类型显式转换为另一种类型。在SQL中,类型转换对于确保类型匹配、提升表达式精度、避免隐式类型冲突等非常关键。

语法支持

  • 标准语法
  • ::类型转换

参数解释:

expr 表示被转换对象,可以是字段名、常量值以及更复杂的表达式;
target_type 表示期望转换的目标类型;

支持的常见目标类型

类型类别示例目标类型
数值类型INTEGER, DECIMAL, FLOAT
字符类型VARCHAR, CHAR
日期时间DATE, TIMESTAMP, TIME
布尔类型BOOLEAN

有关数据类型隐式转换的详细信息,请参见系统表 SYS_DT_CONVERT_LIST

示例

  • 示例1:字符串转数值和字符串转时间
sql
-- 建表
SQL> CREATE TABLE transaction_log (
       id INT PRIMARY KEY,
       amount_str VARCHAR(20),
       created_time_str VARCHAR(30)
     );

-- 插入数据
SQL> INSERT INTO transaction_log VALUES
     (1, '1234.56', '2025-06-01 10:20:30'),
     (2, '7890.00', '2025-06-02 14:45:00'),
     (3, NULL, NULL);

-- CAST方式将字符串转数值、字符串转时间
SQL> SELECT
       id,
       CAST(amount_str AS DECIMAL(10, 2)) AS amount, -- 字符串转数值
       CAST(created_time_str AS TIMESTAMP) AS created_time -- 字符串转时间
     FROM transaction_log;

+----+---------+--------------------------+
| ID | AMOUNT  |       CREATED_TIME       |
+----+---------+--------------------------+
| 1  | 1234.56 | 2025-06-01 10:20:30.000  |
| 2  | 7890    | 2025-06-02 14:45:00.000  |
| 3  | <NULL>  | <NULL>                   |
+----+---------+--------------------------+

-- ::方式将字符串转数值、字符串转时间
SQL> SELECT
       id,
       (amount_str :: DECIMAL(10, 2)) AS amount, -- 字符串转数值
       (created_time_str :: TIMESTAMP) AS created_time -- 字符串转时间
     FROM transaction_log;

+----+---------+--------------------------+
| ID | AMOUNT  |       CREATED_TIME       |
+----+---------+--------------------------+
| 1  | 1234.56 | 2025-06-01 10:20:30.000  |
| 2  | 7890    | 2025-06-02 14:45:00.000  |
| 3  | <NULL>  | <NULL>                   |
+----+---------+--------------------------+
  • 示例2:整数转浮点
sql
-- 建表
SQL> CREATE TABLE numbers (
       id INT PRIMARY KEY,
       a INT,
       b INT
     );

-- 插入数据
SQL> INSERT INTO numbers VALUES
     (1, 5, 2),
     (2, 10, 4);

-- CAST方式将整数转浮点
SQL> SELECT CAST(a AS FLOAT) / b AS result_float FROM numbers;

+--------------+
| RESULT_FLOAT |
+--------------+
| 2.500000e+00 |
| 2.500000e+00 |
+--------------+

-- ::方式将整数转浮点
SQL> SELECT (a :: FLOAT) / b AS result_float FROM numbers;

+--------------+
| RESULT_FLOAT |
+--------------+
| 2.500000e+00 |
| 2.500000e+00 |
+--------------+
  • 示例3:布尔转换
sql
-- 建表
SQL> CREATE TABLE flags (
       id INT,
       flag_str VARCHAR(10)
     );

-- 插入数据
SQL> INSERT INTO flags VALUES
     (1, 'true'),
     (2, 'false'),
     (3, 't'),
     (4, '1'),
     (5, NULL);

-- CAST方式进行布尔转换
SQL> SELECT
       id,
       flag_str,
       CAST(flag_str AS BOOLEAN) AS flag_value
     FROM flags;

+----+----------+------------+
| ID | FLAG_STR | FLAG_VALUE |
+----+----------+------------+
| 1  | true     | T          |
| 2  | false    | F          |
| 3  | t        | T          |
| 4  | 1        | T          |
| 5  | <NULL>   | <NULL>     |
+----+----------+------------+

-- ::方式进行布尔转换
SQL> SELECT
       id,
       flag_str,
       (flag_str :: BOOLEAN) AS flag_value
     FROM flags;

+----+----------+------------+
| ID | FLAG_STR | FLAG_VALUE |
+----+----------+------------+
| 1  | true     | T          |
| 2  | false    | F          |
| 3  | t        | T          |
| 4  | 1        | T          |
| 5  | <NULL>   | <NULL>     |
+----+----------+------------+

应用场景

  • 场景一:字符串转日期以及日期转字符串,用于数据入库、展示、统计时常用
  • 场景二:用于函数调用前显式转换,避免调用失败
  • 场景三:插入/更新字段时转为目标类型,保证类型安全,避免因隐式转换失败