VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

CONVERT

功能描述

Vastbase在SQL Server兼容模式下支持CONVERT函数,用于将表达式由一种数据类型转换为另一种数据类型,返回转换后的指定数据类型的值。

注意事项

  • 该功能仅在数据库兼容模式为SQL Server时支持(即数据库初始化时指定DBCOMPATIBILITY='MSSQL')。

  • SQL Server兼容模式下的DATETIME类型与其它兼容模式下的DATETIME类型并不完全相同,注意区分。

语法格式

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

参数说明

  • data_type

    目标数据类型。

  • length

    指定目标数据类型长度的可选整数,适用于允许用户指定长度的数据类型。

    默认值:30

  • expression

    待转换的有效表达式。

  • style

    用于指定CONVERT函数将如何进行转换的一种整数表示。

    默认值:0

    • 如果样式值style为NULL,则返回 NULL。
    • 当进行日期时间类型到字符串类型的转换时,style支持的取值以及对应输出样式参考表1

    表1 日期时间类型转换style参考

    不带世纪数位 (yy) 带世纪数位 (yyyy) 标准 输出
    - 0 或 100 datetime 和 smalldatetime 的默认值 mon dd yyyy hh:mi [ AM | PM ]
    2 102 ANSI 2 = yy.mm.dd
    102 = yyyy.mm.dd
    8 或 24 108 - hh:mi:ss
    - 109 默认格式 + 毫秒 mon dd yyyy hh:mi:ss:mmm [ AM | PM ]
    - 110 USA mm-dd-yyyy
    - 111 日本 yyyy/mm/dd
    - 112 ISO yyyymmdd
    - 20 或 120 ODBC 规范 yyyy-mm-dd hh:mi:ss(24 小时制)
    - 21、25 或 121 time、date、datetime2 和 datetimeoffset 的 ODBC 规范(用毫秒表示)默认值 yyyy-mm-dd hh:mi:ss.mmm(24 小时制)
    - 23 ISO8601 yyyy-mm-dd

示例

示例1: 直接调用CONVERT函数,将timestamp类型转换为varchar类型。

  • 不指定style(等同于指定style为0):

    select convert(varchar,now());
    

    函数now()返回timestamp类型的当前日期及时间。

    返回结果如下:

            now
    ---------------------
    Aug 17 2023 02:28PM
    (1 row)
    
  • 指定style为不同取值,转换结果为特定样式的字符串:

    select convert(varchar,now(),102);
    select convert(varchar,now(),8);
    select convert(varchar,now(),110);
    

    返回结果依次如下:

        now
    ------------
    2023.08.17
    (1 row)
        
       now
    ----------
    14:34:10
    (1 row)
    
        now
    ------------
    08-17-2023
    (1 row)
    

示例2: 在函数和存储过程中调用CONVERT函数。

1、创建函数。

create function fun_1131634(b1 int,b2 out char(8))return char(8)
as
begin
select (convert(char(8),b1) || 'oo') into b2;
return b2;
end;
/

2、调用新建函数验证结果。

select convert(text,fun_1131634(3));

结果返回如下:

 fun_1131634
-------------
 3oo
(1 row)

3、创建存储过程。

create procedure pro_1131634(b1 int,b2 out char(8))
as
begin
select (convert(char(8),b1) || 'oo') into b2;
raise notice '%',b2;
end;
/

4、调用存储过程验证结果。

select convert(text,pro_1131634(6));

结果返回如下:

NOTICE:  6oo
CONTEXT:  referenced column: pro_1131634
 pro_1131634
-------------
 6oo
(1 row)