6. Q: KingbaseES和Oracle的日期和时间函数对比表
A:
KingbaseES和Oracle的日期和时间函数对比表
函数 | KingbaseES | Oracle |
AGE | 语法格式:AGE([expr1 日期/时间类型,] expr2 日期/时间类型) 功能: 参数 expr1 减去参数 expr2,生成一个两个日期/时间的间隔值。 参数说明: expr1 数据类型是日期/时间类型,包括 DATE、TIME、TIMETZ、TIMESTAMP 和 TIMESTAMPTZ。expr1 缺省时是 CURRENT_DATE。expr2 数据类型是日期/时间类型,包括 DATE、TIME、TIMETZ、TIMESTAMP 和 TIMESTAMPTZ。 注意,输入的日期/时间类型的 TEXT 需要用户显式指定类型,例如 CAST('2003-01-01' AS DATE),CAST('22:10:01' AS TIME),CAST('1981-10-19' AS TIMESTAMP)等等。 返回值说明: 返回值的数据类型为 INTERVAL 型。 | Oracle中没有age函数,类似的函数months_between()判断两个日期之间的月份数量 ,如果需要计算年龄需要months_between()/12,例如:SELECT TRUNC(MONTHS_BETWEEN(SYSDATE, to_date(birthday,'yyyy-mm-dd')/12,0) FROM dual; |
CLOCK_TIMESTAMP | 语法格式: CLOCK_TIMESTAMP() 功能: 返回当前的日期和时间。 参数说明:函数无参数。 返回值说明:返回值的数据类型为TIMESTAMPTZ型。 | Oracle中没有此函数,类似函数current_timestamp() 返回当前会话时区中的当前日期。 |
CURRENT TIMESTAMP | 等同于CURRENT_TIMESTAMP | Oracle 10g有此函数。 |
CURRENT_DATE | 当 compatible_level 为 ‘Oracle’ 时,与 Oracle 兼容,获取当前(而不是事务开始时)的系统日期。 | Oracle中获取当前系统时间是 select sysdate from dual;或者Select systimestamp from dual; |
CURRENT_TIME | 当 compatible_level 为 ‘Oracle’ 时,获取当前(而不是事务开始时)系统的时间(机器时间)。 | Oracle中获取当前系统时间是 select sysdate from dual;或者Select systimestamp from dual; |
CURRENT_TIMESTAMP | 当 compatible_level 为 ‘Oracle’ 时,与 Oracle 兼容,获取当前(而不是事务开始时)系统的日期和时间(机器时间)。 | Oracle 10g有此函数。 |
DATEADD | KingbaseES中DATEADD函数语法格式:DATEADD(expr1 TEXT, expr2 NUMERIC, expr3 日期/时间类型) 功能: 日期加法。 返回值说明:返回值的数据类型为expr3的数据类型。 | 在Oracle 10g中有此函数,但形式上和函数语义上有较大差别。 orcale中一般使用add_months例如: to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') TO_CHA ------ 200002 或者是直接用,时间+N来得到 例如: to_char((sysdate)+1,'yyyy.mm.dd') 系统时间+1天 |
DATEDIFF | 两日期差距。 | 在Oracle 10g中有此函数,但形式上和函数语义上有较大差别。 |
DATEPART | 取日期时间中的某部分,第一个参数指定要取的部分。 | 在Oracle 10g有此函数。 |
EXTRACT | 其功能和 DATEPART 函数相同。 当 compatible_level 为 SQL 时,与 SQL 标准中对 EXTRACT 的各个域定义一致。 | 在Oracle 10g有此函数。 |
DATE_TRUNC | DATE_TRUNC(expr1 TEXT, expr2 日期/时间类型),功能:截取日期成指定的精度(精度由第一个参数指定)。 | Oracle中与此功能相同的函数为TRUNC()。 |
DATE_FORMAT | 在 MySQL 5.0 中有此函数,在功能和形式上基本相同。 | Oracle没有此函数,类似的函数TO_DATE,起功能是把字符串转换为数据库中的日期类型。 |
ISFINITE | 功能:测试指定时间是否为有效时间。 | Oracle没有此函数,也没有此功能函数。 |
LOCALTIME | 当 compatible_level 为 ‘Oracle’ 时,与 Oracle 兼容,获取当前(而不是事务开始时)系统的时间(机器时间)。 | Oracle中获取当前系统时间是 select sysdate from dual; |
LOCALTIMESTAMP | 当 compatible_level 为 ‘Oracle’ 时,与 Oracle 兼容,获取当前(而不是事务开始时)系统的日期和时间(机器时间)。 | Oracle中获取当前系统时间是Select systimestamp from dual; |
NOW | 返回当前事务开始的日期和时间,等效于CURRENT_TIMESTAMP。 当 compatible_level 为 ‘Oracle’ 时,与 Oracle 兼容,获取当前(而不是事务开始时)系统的日期和时间(机器时间) | Oracle 10g CURRENT_TIMESTAMP函数与之对应。 |
STATEMENT_TIMESTAMP | 返回当前(批处理)语句开始执行的日期和时间。 | Oracle没有此函数,也没有此功能函数。 |
STR_VALID | 相当于MSSQL中的ISDATE(expr), 判断所给定的表达式是否为正确的日期时间 | Oracle没有此函数,也没有此功能函数。 |
SYSDATE | 在KingbaseES中,默认情况下SYSDATE与CURRENT_DATE功能相同,当 compatible_level 为 ‘Oracle’ 时,与 Oracle SYSDATE 函数具有相同功能(获取当前时间,而不是事务开始时间)。 | Oracle中获取当前系统时间是 select sysdate from dual; |
SYSTIMESTAMP | 当 compatible_level 为 ‘Oracle’ 时,与 Oracle 兼容,获取当前(而不是事务开始时)系统的时间(机器时间)。 | Oracle中获取当前系统时间是Select systimestamp from dual; |
TIMEOFDAY | 返回当前的高精度日期和时间。 | Oracle没有此函数,也没有此功能函数。 |
TRANSACTION_TIMESTAMP | 返回当前事务开始的日期和时间。 | Oracle没有此函数,也没有此功能函数。 |