更新时间:2025-09-12 GMT+08:00
分享

类型转换函数

CAST

CAST(expr AS type)

描述:将表达式expr显式转换为数据类型type,等价于CONVERT(expr, type)。type支持如下数据类型:

  • BINARY[ (N) ]

    当expr为NULL时,返回值类型为BINARY(0);expr不为NULL时,返回值类型为VARBINARY。如果指定了可选长度N,超出N的部分会被截断,不足N的部分使用0x00进行填充。如果未指定可选长度N,将根据表达式的结果确定返回值的长度。如果返回值的长度超出BINARY的上限,则返回值类型为BLOB,仍不足则返回值类型为LONGBLOB。N的取值受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。

  • CHAR[ (N) ]

    当expr为NULL时,返回值类型为CHAR(0);expr不为NULL时,返回值类型为VARCHAR。如果指定了可选长度N,超出N的部分会被截断,不足N的部分不会进行填充。如果未指定可选长度N,将根据表达式的结果确定返回值的长度。如果返回值的长度超出VARCHAR的上限,则返回值类型为TEXT,仍不足则返回值类型为LONGTEXT。

  • DATE

    返回值类型为DATE。

  • DATETIME[ (M) ]

    返回值类型为DATETIME,M用于确定秒的精度,范围为[0,6]。

  • TIME[ (N) ]

    返回值类型为TIME,M用于确定秒的精度,范围为[0,6]。

  • DECIMAL[ M [ , D ] ) ]

    返回值类型为DECIMAL,M用于确定最大位数(精度),最大值为65,默认为10。D用于确定小数点后的位数,最大值为30,默认为0。

  • DOUBLE

    返回值类型为DOUBLE。

  • FLOAT[ (p) ]

    当没有指定精度p时,返回值类型为FLOAT。当p >=0且p < 24时,返回值类型为FLOAT。当p >= 24时,返回值类型为DOUBLE。 当p < 0时,返回错误。

  • JSON

    返回值类型为JSON。

  • SIGNED[ INTEGER ]

    返回值类型为带符号的BIGINT。

  • UNSIGNED[ INTEGER ]

    返回值类型为不带符号的BIGINT。

示例:

m_db=# SELECT CAST('abc' AS BINARY(2));
WARNING:  Truncated incorrect binary(2) value: 'abc'
CONTEXT:  referenced column: cast
 cast 
------
 ab
(1 row)

m_db=# SELECT CAST('abc' AS CHAR(10));
 cast 
------
 abc
(1 row)

m_db=# SELECT CAST('2023/1/1' AS DATE);
    cast    
------------
 2023-01-01
(1 row)

m_db=# SELECT CAST('2023/01/01' AS DATETIME(2));
          cast          
------------------------
 2023-01-01 00:00:00.00
(1 row)

m_db=#  SELECT CAST('09:23:14' AS TIME(2));
    cast     
-------------
 09:23:14.00
(1 row)

m_db=# SELECT CAST(12.34567 AS DECIMAL(10,4));
  cast   
---------
 12.3457
(1 row)

m_db=# SELECT CAST(-12 AS SIGNED);
 cast 
------
  -12
(1 row)

m_db=# SELECT CAST(-12 AS UNSIGNED);
         cast         
----------------------
 18446744073709551604
(1 row)

CONVERT

  • CONVERT(expr, type)

    描述:将表达式expr显式转换为数据类型type,等价于CAST(expr, type)

    示例:

    m_db=# SELECT CONVERT('abc', BINARY(2));
    WARNING:  Truncated incorrect binary(2) value: 'abc'
    CONTEXT:  referenced column: convert
     convert 
    ---------
     ab
    (1 row)
    
    m_db=# SELECT CONVERT('abc', CHAR(10));
     convert 
    ---------
     abc
    (1 row)
    
    m_db=# SELECT CONVERT('2023/1/1', DATE);
      convert   
    ------------
     2023-01-01
    (1 row)
    
    m_db=# SELECT CONVERT('2023/01/01', DATETIME(2));
            convert         
    ------------------------
     2023-01-01 00:00:00.00
    (1 row)
    
    m_db=# SELECT CONVERT('09:23:14', TIME(2));
       convert   
    -------------
     09:23:14.00
    (1 row)
    
    m_db=# SELECT CONVERT(12.34567, DECIMAL(10,4));
     convert 
    ---------
     12.3457
    (1 row)
    
    m_db=# SELECT CONVERT(-12, SIGNED);
     convert 
    ---------
         -12
    (1 row)
    
    m_db=# SELECT CONVERT(-12, UNSIGNED);
           convert        
    ----------------------
     18446744073709551604
    (1 row)
  • CONVERT(expr USING transcoding_name)

    描述:将表达式expr转换为transcoding_name指定的字符集。

    示例:

    m_db=# SELECT CONVERT('abc' USING 'latin1');
     convert 
    ---------
     abc
    (1 row)

相关文档