日期函数
本节介绍如下日期函数:
ADD_MONTHS
ADD_MONTHS是Oracle系统函数,GaussDB(DWS)中并不隐式支持该函数。
在使用此函数之前,请执行如下操作:
- 创建并使用MIG_ORA_EXT模式。
- 复制custom scripts文件的内容,并在要执行迁移的所有目标数据库中执行此脚本。详情请参见迁移流程。
ADD_MONTHS返回带月份的日期。
- date参数为datetime类型。
- integer参数为integer类型。
返回类型为date。
输入:ADD_MONTHS
1 2 3 4 5 6 7 |
SELECT TO_CHAR( ADD_MONTHS ( hire_date ,1 ) ,'DD-MON-YYYY' ) "Next month" FROM employees WHERE last_name = 'Baer' ; |
输出
1 2 3 4 5 6 7 |
SELECT TO_CHAR( MIG_ORA_EXT.ADD_MONTHS ( hire_date ,1 ) ,'DD-MON-YYYY' ) "Next month" FROM employees WHERE last_name = 'Baer' ; |
TO_DATE(使用第三个参数)
TO_DATE(' 2019-05-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')中的第三个参数需要加注释。
输入
1 2 3 4 5 6 7 8 9 |
CREATE TABLE PRODUCT ( prod_id INTEGER , prod_code VARCHAR(5) , prod_name VARCHAR(100) , unit_price NUMERIC(6,2) NOT NULL , manufacture_date DATE DEFAULT sysdate ) PARTITION BY RANGE (manufacture_date) (PARTITION "P_20190501" VALUES LESS THAN (TO_DATE(' 2019-05-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) ); |
输出
1 2 3 4 5 6 7 8 9 |
CREATE TABLE PRODUCT ( prod_id INTEGER , prod_code VARCHAR(5) , prod_name VARCHAR(100) , unit_price NUMERIC(6,2) NOT NULL , manufacture_date DATE DEFAULT sysdate ) PARTITION BY RANGE (manufacture_date) (PARTITION "P_20190501" VALUES LESS THAN (TO_DATE(' 2019-05-02 00:00:00', 'YYYY-MM-DD HH24:MI:SS'/* , 'NLS_CALENDAR=GREGORIAN' */)) ); |
输入
1 2 3 4 5 6 7 |
select trunc(to_char(trunc(add_months(sysdate,-12),'MM'),'YYYYMMDD')/100) into v_start_date_s from dual; select trunc(to_char(trunc(sysdate,'mm'),'YYYYMMDD')/100) into v_end_date_e from dual; ID_MNTH>=TRUNC(TO_CHAR(ADD_MONTHS(to_date(to_char('||v_curr_date||'),''YYYYMMDD''),-12),''YYYYMMDD'')/100)) AND ID_MNTH>=TRUNC(TO_CHAR(ADD_MONTHS(to_date(to_char('||v_curr_date||'),''YYYYMMDD''),-12),''YYYYMMDD'')/100)) select TRUNC(to_char(add_months(trunc(TO_DATE(TO_CHAR(P_DATE),'YYYYMMDD'),'MM')-1,-2),'YYYYMMDD')/100) INTO START_MONTH from dual; select TRUNC(TO_CHAR(trunc(TO_DATE(TO_CHAR(P_DATE),'YYYYMMDD'),'MM')-1,'YYYYMMDD')/100) INTO END_MONTH from dual; |
输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
SELECT Trunc(To_char(Date_trunc ('MONTH', mig_ora_ext.Add_months (SYSDATE, -12)) , 'YYYYMMDD') / 100) INTO v_start_date_s FROM dual; SELECT Trunc(To_char(Date_trunc ('MONTH', SYSDATE), 'YYYYMMDD') / 100) INTO v_end_date_e FROM dual; SELECT Trunc(To_char(mig_ora_ext.Add_months (Date_trunc ('MONTH', To_date(To_char(p_date), 'YYYYMMDD' )) - 1 , -2), 'YYYYMMDD') / 100) INTO start_month FROM dual; SELECT Trunc(To_char(Date_trunc ('MONTH', To_date(To_char(p_date), 'YYYYMMDD')) - 1, 'YYYYMMDD') / 100) INTO end_month FROM dual; |
LAST_DAY
Oracle的LAST_DAY函数根据date(日期)值返回该月份的最后一天。
LAST_DAY(date)
不论date的数据类型如何,返回类型始终为DATE。
LAST_DAY是Oracle的系统函数,GaussDB(DWS)不隐式支持该函数。要支持此函数,DSC会在MIG_ORA_EXT模式中创建一个LAST_DAY函数。迁移后的语句将使用此新函数MIG_ORA_EXT.LAST_DAY,如下示例。
在使用此函数之前,请执行如下操作:
- 创建并使用MIG_ORA_EXT模式。
- 复制custom scripts文件的内容,并在要执行迁移的所有目标数据库中执行此脚本。详情请参见迁移流程。
输入:LAST_DAY
1 2 3 4 5 |
SELECT to_date( '01/' || '07/' || to_char( sysdate ,'YYYY' ) ,'dd/mm/yyyy' ) FIRST ,last_day( to_date( '01/' || '07/' || to_char( sysdate ,'YYYY' ) ,'dd/mm/yyyy' ) ) last__day FROM dual; |
输出
1 2 3 4 5 6 7 |
SELECT to_date( '01/' || '07/' || to_char( sysdate ,'YYYY' ) ,'dd/mm/yyyy' ) FIRST ,MIG_ORA_EXT.LAST_DAY ( to_date( '01/' || '07/' || to_char( sysdate ,'YYYY' ) ,'dd/mm/yyyy' ) ) last__day FROM dual; |
MONTHS_BETWEEN
MONTHS_BETWEEN函数返回两个日期之间的月份数。
MONTHS_BETWEEN是Oracle系统函数,GaussDB(DWS)并不隐式支持该函数。要支持此函数,DSC需在MIG_ORA_EXT模式中创建一个MONTHS_BETWEEN函数。迁移后的语句将使用此新函数MIG_ORA_EXT.MONTHS_BETWEEN,如下所示。
在使用此函数之前,请执行如下操作:
- 创建并使用MIG_ORA_EXT模式。
- 复制custom scripts文件中的内容,并在要执行迁移的所有目标数据库中执行此脚本。详情请参见迁移流程。
输入:MONTHS_BETWEEN
Select Months_Between(to_date('2017-06-20', 'YYYY-MM-DD'), to_date('2011-06-20', 'YYYY-MM-DD')) from dual;
输出
Select MIG_ORA_EXT.MONTHS_BETWEEN(to_date('2017-06-20', 'YYYY-MM-DD'), to_date('2011-06-20', 'YYYY-MM-DD')) from dual;