VastbaseG100

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

Menu

DATEPART

功能描述

Vastbase在SQL Server模式下支持DATEPART函数,用于返回表示指定 date 的指定 datepart 的整数,返回值为整数类型。

注意事项

  • 该功能仅在数据库兼容模式为SQL Server时能够使用(即创建DB时DBCOMPATIBILITY='MSSQL'),在其他数据库兼容模式下不能使用该特性。
  • 该函数支持的Vastbase版本:
    • V2.2 Build 10 (Patch No.11)及以后补丁版本。
    • V2.2 Build 12及以后版本。

语法格式

DATEPART(datepart,date)

参数说明

  • datepart

    datepart将返回表示 date 参数的特定部分的整数,支持的datepart参数如下所示:

    datepart 缩写形式 备注
    year yy,yyyy
    quarter qq,q 季度
    month mm,m
    dayofyear dy,y 一年中的第几天
    day dd,d
    week wk,ww 一年中的第几周
    weekday dw,w 星期几
    hour hh 小时
    minute mi,n 分钟
    second ss,s
    millisecond ms 毫秒
    microsecond mcs 微秒
    nanosecond ns 毫微秒
    tzoffset tz 时区偏移量
    iso_week isowk,isoww ISO标准周数
  • date

    要返回datepart值的日期、时间或时间戳表达式。日期表达式必须包含datepart类型的值。

    可解析为下列值之一的表达式:

    • time
    • timetz
    • date
    • timestamp
    • timestamptz

示例

前置步骤:创建兼容模式为SQL Server的库db_sqlserver,并进入。

CREATE DATABASE db_sqlserver DBCOMPATIBILITY='MSSQL';
\c db_sqlserver

示例1:直接调用DATEPART函数。

SELECT DATEPART(m,timestamp'2007-10-30 12:15:32.1234567');

结果返回如下:

 datepart
----------
       10
(1 row)

示例2:date参数为行存表中的列。

1、创建测试表并插入数据。

create table tb_info(id int,name text,birth date);
insert into tb_info values(1,'lili','1999-11-11');
insert into tb_info values(2,'kiko','2000-2-15');
insert into tb_info values(3,'lala','2001-1-3');
insert into tb_info values(4,'ming','1999-5-7');
create table tb_class(class int,year int);
insert into tb_class values(4,2001);
insert into tb_class values(5,2000);
insert into tb_class values(6,1999);
insert into tb_class values(7,1998);

2、查询表中数据。

select * from tb_info order by id;

结果返回如下:

 id | name |   birth
----+------+------------
  1 | lili | 1999-11-11
  2 | kiko | 2000-02-15
  3 | lala | 2001-01-03
  4 | ming | 1999-05-07
(4 rows)
select * from tb_class order by class;

结果返回如下:

 class | year
-------+------
     4 | 2001
     5 | 2000
     6 | 1999
     7 | 1998
(4 rows)

3、调用DATEPART函数查询数据。

select datepart(yy,birth),sum(datepart(yy,birth))/datepart(yy,birth) count from tb_info having datepart(yy,birth) group by 1 order by 1;

结果返回如下:

 datepart | count
----------+-------
     1999 |     2
     2000 |     1
     2001 |     1
(3 rows)