openGauss插件使用指南:函数和操作符—时间和日期处理函数和操作符(4)

  • get_format(expr1, expr2)

    描述:expr1可接收date、datetime、timestamp、time四种类型名字,expr2可接收五种规格字符串:'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'。函数根据expr1和expr2返回对应类型的对应规格的字符串。

    该函数返回值情况如下表所示:

    类型规格返回值
    DATE'USA''%m.%d.%Y'
    DATE'JIS''%Y-%m-%d'
    DATE'ISO''%Y-%m-%d'
    DATE'EUR''%d.%m.%Y'
    DATE'INTERNAL''%Y%m%d'
    DATETIME'USA''%Y-%m-%d %H.%i.%s'
    DATETIME'JIS''%Y-%m-%d %H:%i:%s'
    DATETIME'ISO''%Y-%m-%d %H:%i:%s'
    DATETIME'EUR''%Y-%m-%d %H.%i.%s'
    DATETIME'INTERNAL''%Y%m%d%H%i%s'
    TIMESTAMP'USA''%Y-%m-%d %H.%i.%s'
    TIMESTAMP'JIS''%Y-%m-%d %H:%i:%s'
    TIMESTAMP'ISO''%Y-%m-%d %H:%i:%s'
    TIMESTAMP'EUR''%Y-%m-%d %H.%i.%s'
    TIMESTAMP'INTERNAL''%Y%m%d%H%i%s'
    TIME'USA''%h:%i:%s %p'
    TIME'JIS''%H:%i:%s'
    TIME'ISO''%H:%i:%s'
    TIME'EUR''%H.%i.%s'
    TIME'INTERNAL''%H%i%s'

    返回值类型:text

    示例:

    openGauss=# select get_format(datetime, 'iso');
        get_format
    -------------------
    %Y-%m-%d %H:%i:%s
    (1 row)
    
  • extract(unit from expr)

    描述:从expr参数中提取由unit参数指定的部分。

    返回值:bigint

    备注:

    • 此函数兼容MySQL插表时的严格模式和非严格模式表现。

    • 在B模式数据库中,当dolphin.b_compatibility_mode为true时才会替代openGauss原有extract函数。

    • 函数参数被当做time类型解析时,其参数约束范围为[-838:59:59, 838:59:59],与openGauss中time类型插表约束相同。

    • expr参数在解析时按照unit参数解析。当unit涉及YEAR、WEEK、QUARTER、MONTH、DAY时,expr参数被解析为date或者datetime;当unit只涉及HOUR、MINUTE、SECOND、MICRESECOND时,expr参数被解析为time。

    • extract函数可以提取复合unit。

      • 复合unit有:DAY_HOUR,DAY_MINUTE,DAY_SECOND,DAY_MICROSECOND,HOUR_MINUTE,HOUR_SECOND,HOUR_MICROSECOND,MINUTE_SECOND,MINUTE_MICROSECOND,SECOND_MICROSECOND
      • 对于复合unit:DAY_HOUR,DAY_MINUTE,DAY_SECOND,DAY_MICROSECOND,由于这些unit中包含DAY部分,所以openGauss将expr当作datetime来解析。

    示例:

    openGauss=# set dolphin.b_compatibility_mode = true;
    SET
    
    openGauss=# select extract(year from '2021-11-12 12:12:12.000123');
    extract
    ---------
        2021
    (1 row)
    
    openGauss=# select extract(day_microsecond from '2021-11-12 12:12:12.000123');
        extract
    ----------------
    12121212000123
    (1 row)
    
    openGauss=# select extract(hour_microsecond from '2021-11-12 12:12:12.000123');
      extract
    --------------
    121212000123
    (1 row)
    
    openGauss=# set dolphin.b_compatibility_mode = false;
    SET
    
  • date_format(expr, format)

    描述:expr参数为输入的date或者datetime格式内容,该函数根据format参数格式化expr参数对应部分,format参数取值如下表:

    提取标志意义取值范围
    %a简写工作日名称Sun…Sat
    %b简写月份名称Jan…Dec
    %c数字形式的月份0…12
    %D有后缀的月份中的天数0th, 1st, 2nd, 3rd, …
    %d数字形式的月份中的天数00…31
    %e数字形式的月份中的天数0…31
    %f微秒000000…999999
    %H小时00…23
    %h小时01…12
    %I小时01…12
    %i分钟00…59
    %j一年中的天数001…366
    %k小时0…23
    %l小时1…12
    %M月份全称January…December
    %m数字形式的月份00…12
    %p上午或者下午AM 或者 PM
    %r范围为12小时的时间%r返回的时间格式为'hh:mm:ss AM'或者'hh:mm:ss PM'
    %S00…59
    %s00…59
    %T范围为24小时的时间%T返回的时间格式为'hh:mm:ss'
    %U日期在一年中对应的周数(对应WEEK函数mode为0的情况)00…53
    %u日期在一年中对应的周数(对应WEEK函数mode为1的情况)00…53
    %V日期在一年中对应的周数(对应WEEK函数mode为2的情况)此标志应和'%X'一起使用01…53
    %v日期在一年中对应的周数(对应WEEK函数mode为3的情况)此标志应和'%X'一起使用01…53
    %W工作日全称Sunday…Saturday
    %w工作日索引0=Sunday…6=Saturday
    %X日期所在周数对应的四位数字年份(计算方式为Sunday是一周的第一天),此标志应和'%V'一起使用
    %x日期所在周数对应的四位数字年份(计算方式为Monday是一周的第一天),此标志应和'%v'一起使用
    %Y四位数字年份
    %y两位数字年份
    %%'%'字面量
    %x未列出的字符x

    返回值:text

    备注:此函数兼容MySQL插表时的严格模式和非严格模式表现。

    示例:

    -- 将日期格式化为指定内容
    openGauss=# select date_format('2001-01-01 12:12:12','%Y %M %H');
    date_format   
    -----------------
    2001 January 12
    (1 row)
    
    -- 将日期格式化为所在周数或者工作日
    openGauss=# select date_format('2001-01-01 12:12:12','%V %v %U %u %W %w');
        date_format
    ----------------------
    53 01 00 01 Monday 1
    (1 row)
    
  • from_unixtime(unix_timestamp[,format])

    描述:第一个参数为数值格式的时间戳,代表距离'1970-01-01 00:00:00'UTC的秒数;第二个参数为可选字符串参数。第二参数不传入时,函数返回'1970-01-01 00:00:00' UTC + unix_timestamp + 当前时区偏移对应的datetime;当第二个参数给出时,函数会将datetime根据第二个参数进行格式化,格式化的方法与date_format函数相同。当unix_timestamp超过最大时间戳范围后,函数返回NULL。

    返回值类型:

    • 仅传入第一个参数时:datetime

    • 传入两个参数时:text

    示例:

    openGauss=# select from_unixtime(1);
        from_unixtime
    ---------------------
    1970-01-01 08:00:01
    (1 row)
    
    openGauss=# select from_unixtime(1,'%Y');
    from_unixtime 
    ---------------
    1970
    (1 row)
    
    openGauss=# select from_unixtime(2147483647);
        from_unixtime
    ---------------------
    2038-01-19 11:14:07
    (1 row)
    
    openGauss=# select from_unixtime(2147483648);
    from_unixtime
    ---------------
    
    (1 row)
    
  • str_to_date(str, format)

    描述:该函数是date_format函数的逆函数。函数会尝试将字符串str与字符串format匹配,并根据format中包含的标志来构造对应date格式、datetime格式或者time格式的内容。

    返回值类型:

    • 该函数返回值类型为text,以便可以得到time、date或datetime的结果格式。

    • 当format中标志仅包含时间相关字符串'fHISThiklrs'中的字符时:time格式内容

    • 当format中标志仅包含日期相关字符串'MVUXYWabcjmvuxyw'中的字符时:date格式内容

    • 当format中标志为上述两种情况混合时:datetime格式内容

    • 若有函数结果参与计算需求,可以使用cast语句将函数结果转换为合适数据数据类型而后再参与计算,如:SELECT CAST(STR_TO_DATE('2021-11-12 12:12:12', '%Y-%m-%d %T') AS DATETIME) + 1;

    备注:

    • 此函数兼容MySQL插表时的严格模式和非严格模式表现。

    • 只有当dolphin.sql_mode中不含'no_zero_date'时,才能构造出日期'0000-00-00'。

    • 只有当dolphin.sql_mode中不含'no_zero_date'时,才能构造出单独的时间,如select str_to_date('10', '%h');

    示例:

    -- 普通构造日期
    openGauss=# select str_to_date('01,5,2013','%d,%m,%Y');
    str_to_date
    -------------
    2013-05-01
    (1 row)
    
    -- 使用年份,周数,工作日构造日期
    openGauss=# select str_to_date('200442 Monday', '%X%V %W');
    str_to_date
    -------------
    2004-10-18
    (1 row)
    
    -- 使用年份,天数构造日期
    openGauss=# select str_to_date('2004 100', '%Y %j');
    str_to_date
    -------------
    2004-04-09
    (1 row)
    
    -- 构造时间
    openGauss=# set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes';
    SET
    openGauss=# select str_to_date('1:12:12 pm', '%r');
    str_to_date
    -------------
    13:12:12
    (1 row)
    
  • sleep(duration)

    描述:睡眠 duration 秒, 然后返回0

    返回值:int

    备注:此函数和mysql略有不同,函数睡眠达到给定时间,则返回0,如果中间发生中断,则返回NULL。

    示例:

    openGauss=# SELECT sleep(1);
    sleep 
    -------
        0
    (1 row)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值