6 DMDRS函数
datepart参数取值见下表。
| datepart取值 | datepart意义 |
|---|---|
| YEAR、YYYY、YY、SQL_TSI_YEAR | 年 |
| MONTH、MM、M、SQL_TSI_MONTH | 月 |
| DAY、DD、D、SQL_TSI_DAY | 日 |
| HOUR、HH、SQL_TSI_HOUR | 时 |
| MINUTE、MI、N、SQL_TSI_MINUTE | 分 |
| SECOND、S、SQL_TSI_SECOND | 秒 |
| MILLISECOND、MS、SQL_TSI_FRAC_SECOND | 毫秒 |
| QUARTER、QQ、Q、SQL_TSI_QUARTER | 所处的季度 |
| DAYOFYEAR、DY、Y | 在年份中所处的天数 |
| WEEK、WK、WW、SQL_TSI_WEEK | 在年份中所处的周数 |
| WEEKDAY、DW | 在一周中所处的天数 |
fmt参数取值见下表。
| fmt取值 | fmt意义 |
|---|---|
| cc, scc | 世纪,从 1950、2050 等年份的一月一号午夜凌晨起的日期,舍取至下个世纪的一月一号 |
| syear, syyy, y, yy, yyy, yyyy, year | 年,从七月一号午夜凌晨起的日期,舍取至下个年度的一月一号 |
| Q | 季度,从十六号午夜凌晨舍取到季度的第二个月,忽略月中的天数 |
| month,mon, mm, m, rm | 月,从十六号午夜凌晨舍取 |
| Ww | 舍取为与本年第一天星期数相同的最近的那一天 |
| W | 舍取为与本月第一天星期数相同的最近的一天 |
| iw | 舍取为最近的周一 |
| ddd, dd, j | 从正午起,舍取为下一天,默认值 |
| day, dy, d | 星期三正午起,舍取为下个星期天 |
| hh, hh12, hh24 | 在一个小时的30分30秒之后的时间舍取为下一小时 |
| Mi | 在一个分钟30秒之后的时间舍取为下一分 |
功能
返回日期date加上指定天数n以后的新日期。
语法
ADD_DAYS(date, n) RETURN DATE
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
| n | INT | 天数。 |
示例
DRS_SYS.PUT_LINE(ADD_DAYS('2000-01-12', 1000));
输出结果为:2002-10-08
功能
返回日期date加上指定月数n以后的新日期。
语法
ADD_MONTHS(date, n) RETURN DATE
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
| n | INT | 月数。 |
示例
DRS_SYS.PUT_LINE(ADD_MONTHS('2000-01-31', 1));
输出结果为:2000-02-29
DRS_SYS.PUT_LINE(ADD_MONTHS('2000-01-31 20:00:00', 1));
输出结果为:2000-02-29
功能
返回日期date加上指定周数n以后的新日期。
语法
ADD_WEEKS(date, n) RETURN DATE
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
| n | INT | 周数。 |
示例
DRS_SYS.PUT_LINE(ADD_WEEKS('2000-01-12',1));
输出结果为:2000-01-19
功能
返回系统当前日期。
语法
CURDATE() RETURN DATE
示例
DRS_SYS.PUT_LINE(CURDATE());
输出结果为:2023-05-01
功能
返回系统当前时间。精度n取值范围:0~6,默认值为 6。
语法
CURTIME([prec]) RETURN TIME
| 参数名 | 类型 | 说明 |
|---|---|---|
| prec | SMALLINT | 可选参数,精度,默认值为6。 |
示例
DRS_SYS.PUT_LINE(CURTIME());
输出结果为:10:29:45.901000
DRS_SYS.PUT_LINE(CURTIME(2));
输出结果为:10:29:45.90
功能
返回系统当前日期。同函数CURDATE。
功能
返回系统当前时间。精度n取值范围:0~6,默认值为 6。同函数CURTIME。
功能
返回系统当前时间戳。精度n取值范围:0~6,默认值为 6。
语法
CURRENT_TIMESTAMP([prec]) RETURN TIMESTAMP
| 参数名 | 类型 | 说明 |
|---|---|---|
| prec | SMALLINT | 可选参数,精度。 |
示例
DRS_SYS.PUT_LINE(CURRENT_TIMESTAMP());
输出结果为:2023-05-04 10:29:45.902000
DRS_SYS.PUT_LINE(CURRENT_TIMESTAMP(2));
输出结果为:2023-05-04 10:29:45.90
功能
返回日期date加上n个datepart指定的时间段后的新日期。
语法
DATEADD(datepart, n, date) RETURN TIMESTAMP(6)
| 参数名 | 类型 | 说明 |
|---|---|---|
| datepart | VARCHAR(32) | 时间段。 |
| n | INT | 时间段数。 |
| date | TIMESTAMP | 日期。 |
示例
DRS_SYS.PUT_LINE(DATEADD('MONTH', 10, '2002-01-01'));
输出结果为:2002-11-01 00:00:00.000000
功能
返回两个日期之间相差的datepart时间段数。
语法
DATEDIFF(datepart, date1 , date2) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| datepart | VARCHAR(32) | 时间段。 |
| date1 | DATE | 日期。 |
| date2 | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(DATEDIFF('MONTH', '2001-06-01', '2002-01-01'));
输出结果为:7
DRS_SYS.PUT_LINE(DATEDIFF('MS','2003-02-14 12:10:10.000','2003-02-14 12:09:09.300'));
输出结果为:-60700
功能
返回时间日期date中datepart指定部分的数值。
语法
DATEPART(datepart, date) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| datepart | VARCHAR(32) | 时间段。 |
| date | TIMESTAMP | 时间日期。 |
示例
DRS_SYS.PUT_LINE(DATEPART('SECOND', '2000-02-02 13:33:40.00'));
输出结果为:40
DRS_SYS.PUT_LINE(DATEPART('DY', '2000-02-02'));
输出结果为:33
DRS_SYS.PUT_LINE(DATEPART('WEEKDAY', '2002-02-02'));
输出结果为:7
功能
返回日期date中datepart指定部分的数值。与DATEPART区别在于参数顺序不同。
语法
DATE_PART(date, datepart) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | TIMESTAMP | 日期。 |
| datepart | VARCHAR(32) | 时间段。 |
示例
DRS_SYS.PUT_LINE(DATE_PART('2000-02-02 13:33:40.00', 'SECOND'));
输出结果为:40
DRS_SYS.PUT_LINE(DATE_PART('2000-02-02', 'DY'));
输出结果为:33
DRS_SYS.PUT_LINE(DATE_PART('2002-02-02', 'WEEKDAY'));
输出结果为:7
功能
返回日期date在所处月份中的第几天。
语法
DAY(date) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(DAY('2016-06-27'));
输出结果为:27
功能
返回日期date的星期名称。
语法
DAYNAME(date) RETURN VARCHAR(16)
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(DAYNAME('2012-01-01'));
输出结果为:Sunday
功能
返回日期date在所处月份中的第几天。同函数DAY。
功能
返回日期date在所处星期中的第几天。
语法
DAYOFWEEK(date) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(DAYOFWEEK('2003-01-01'));
输出结果为:4
DRS_SYS.PUT_LINE(DAYOFWEEK('2023-04-28'));
输出结果为:6
功能
返回日期date在所处年份中的第几天。
语法
DAYOFYEAR(date) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(DAYOFYEAR('2003-03-03'));
输出结果为:62
功能
返回两个日期之间相差的天数。
语法
DAYS_BETWEEN(date1, date2) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date1 | DATE | 日期。 |
| date2 | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(DAYS_BETWEEN('2003-03-03', '2003-03-04'));
输出结果为:-1
功能
返回系统当前时间戳。精度n取值范围 0-6,默认为 6。同函数CURRENT_TIMASTAMP。
功能
返回多个日期中的最大日期。
语法
GREATEST(date1, ...) RETURN DATE
| 参数名 | 类型 | 说明 |
|---|---|---|
| date1 | DATE | 日期。 |
| 可变参数 | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(GREATEST('1998-01-01', '2000-01-01', '1999-01-01'));
输出结果为:2000-01-01
功能
返回两个日期中的最大日期。
语法
GREAT(date1, date2) RETURN DATE
| 参数名 | 类型 | 说明 |
|---|---|---|
| date1 | DATE | 日期。 |
| date2 | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(GREAT('1998-01-01', '1999-01-01'));
输出结果为:1999-01-01
功能
返回时间中的小时分量。
语法
HOUR(time) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| time | TIME | 时间。 |
示例
DRS_SYS.PUT_LINE(HOUR('21:10:16'));
输出结果为:21
功能
返回日期date所在月最后一天的日期。
语法
LAST_DAY(date) RETURN DATE
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(LAST_DAY('2008-02-11 12:00:00'));
输出结果为:2008-02-29
功能
返回多个日期中的最小日期。
语法
LEAST(date1, ...) RETURN DATE
| 参数名 | 类型 | 说明 |
|---|---|---|
| date1 | DATE | 日期。 |
| 可变参数 | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(LEAST('1998-01-01', '2000-01-01', '1999-01-01'));
输出结果为:1998-01-01
功能
返回系统当前时间。精度n取值范围: 0~6,默认值为 6。同函数CURTIME。
功能
返回系统当前时间戳。精度n取值范围 0~6,默认值为 6。同函数CURRENT_TIMASTAMP。
功能
返回时间time中的分钟分量。
语法
MINUTE(time) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| time | TIME | 时间。 |
示例
DRS_SYS.PUT_LINE(MINUTE('20:10:16'));
输出结果为:10
功能
返回日期date中的月份分量。
语法
MONTH(date) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(MONTH('2002-11-12'));
输出结果为:11
功能
返回日期date中月份分量的名称。
语法
MONTHNAME(date) RETURN VARCHAR(16)
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(MONTHNAME('2002-11-12'));
输出结果为:November
功能
返回两个日期之间相差的月数。如果均为所在月的同一天或者最后一天, 则为整数。否则按照一个月31天计算小数部分。
语法
MONTHS_BETWEEN(date1, date2) RETURN DOUBLE
| 参数名 | 类型 | 说明 |
|---|---|---|
| date1 | DATE | 日期。 |
| date2 | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(MONTHS_BETWEEN('1995-03-28 12:00:00', '1995-01-31 12:00:00'));
输出结果为:1.903226
功能
返回日期date之后满足条件的第一天。
语法
NEXT_DAY(date, s) RETURN DATE
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
| s | VARCHAR(16) | 星期字符串。 |
示例
DRS_SYS.PUT_LINE(NEXT_DAY('2001-08-02', 'MONDAY'));
输出结果为:2001-08-06
DRS_SYS.PUT_LINE(NEXT_DAY('2001-08-02 12:00:00', 'FRI'));
输出结果为:2001-08-03
DRS_SYS.PUT_LINE(NEXT_DAY('2023-04-28', 'FRI'));
输出结果为:2023-05-05
功能
返回系统当前时间戳。精度n取值范围:0~6,默认值为 6。同函数CURRENT_TIMASTAMP。
功能
返回日期date在所处年份中的第几个季度。
语法
QUARTER(date) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(QUARTER('2002-08-01'));
输出结果为:3
功能
将时间日期date四舍五入到最接近fmt指定的形式。如果没有指定fmt,则到今天正午12P.M.为止的时间舍取为今天的日期,之后的时间舍取为第二天12A.M.。
语法
ROUND(date[, fmt]) RETURN TIMESTAMP
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | TIMESTAMP | 时间日期。 |
| fmt | VARCHAR(16) | 可选参数,格式字符串。 |
示例
DRS_SYS.PUT_LINE(ROUND('1992-10-27', 'scc'));
输出结果为:2001-01-01 00:00:00.000000
DRS_SYS.PUT_LINE(ROUND('1992-10-27 12:00:01', 'ddd'));
输出结果为:1992-10-28 00:00:00.000000
DRS_SYS.PUT_LINE(ROUND('1992-10-27 12:00:31', 'mi'));
输出结果为:1992-10-27 12:01:00.000000
功能
返回时间time中的秒分量。
语法
SECOND(time) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| time | TIME | 时间。 |
示例
DRS_SYS.PUT_LINE(SECOND('08:10:25.300'));
输出结果为:25
功能
获取当前系统日期。
语法
SYSDATE() RETURN TIMESTAMP(0)
功能
返回时间戳ts加上n个datepart指定的时间段后的新时间戳。
语法
TIMESTAMPADD(datepart, n, ts) RETURN TIMESTAMP
| 参数名 | 类型 | 说明 |
|---|---|---|
| datepart | VARCHAR(32) | 时间段。 |
| n | INT | 时间段数。 |
| ts | TIMESTAMP | 时间戳。 |
示例
DRS_SYS.PUT_LINE(TIMESTAMPADD('SQL_TSI_FRAC_SECOND', 5, '2003-02-10 08:12:20.300'));
输出结果为:2003-02-10 08:12:20.305000
功能
返回两个时间戳之间相差的datepart时间段数。
语法
TIMESTAMPDIFF(datepart, ts1, ts2) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| datepart | VARCHAR(32) | 时间段。 |
| ts1 | TIMESTAMP | 时间戳。 |
| ts2 | TIMESTAMP | 时间戳。 |
示例
DRS_SYS.PUT_LINE(TIMESTAMPDIFF('SQL_TSI_WEEK', '2003-02-07', '2003-02-16'));
输出结果为:1
DRS_SYS.PUT_LINE(TIMESTAMPDIFF('SQL_TSI_FRAC_SECOND', '2003-02-14 12:10:10.000', '2003-02-14 12:09:09.300'));
输出结果为:-60700
功能
将字符串s转换成日期。
语法
TO_DATE(str) RETURN DATE
| 参数名 | 类型 | 说明 |
|---|---|---|
| str | VARCHAR(32) | 日期字符串。 |
功能
将字符串s转换成时间戳。
语法
TO_TIMESTAMP(str) RETURN TIMESTAMP(6)
| 参数名 | 类型 | 说明 |
|---|---|---|
| str | VARCHAR(32) | 时间戳字符串。 |
功能
将时间日期date截断到fmt指定的形式。语法与ROUND类似,但结果是直接截断,而不是四舍五入。
语法
TRUNC(date[, fmt]) RETURN TIMESTAMP
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | TIMESTAMP | 时间日期。 |
| fmt | VARCHAR(16) | 可选参数,格式字符串。 |
示例
DRS_SYS.PUT_LINE(TRUNC('1992-10-27', 'scc'));
输出结果为:1900-01-01 00:00:00.000000
DRS_SYS.PUT_LINE(TRUNC('1992-10-27 11:00:00', 'ww'));
输出结果为:1992-10-21 00:00:00.000000
DRS_SYS.PUT_LINE(TRUNC('1992-10-27 12:00:31', 'mi'));
输出结果为:1992-10-27 12:00:00.000000
功能
返回日期date在所处年份中的第几周。
语法
WEEK(date) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(WEEK('1992-10-26'));
输出结果为:44
功能
返回指定日期的星期值。如果是星期日则返回 0。
语法
WEEKDAY(date) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(WEEKDAY('1998-10-26'));
输出结果为:1
DRS_SYS.PUT_LINE(WEEKDAY('1998-10-25'));
输出结果为:0
功能
返回两个日期之间相差的周数。
语法
WEEKS_BETWEEN(date1, date2) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date1 | DATE | 日期。 |
| date2 | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(WEEKS_BETWEEN('1998-2-28', '1998-2-22'));
输出结果为:0
功能
返回日期date中的年分量。
语法
YEAR(date) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(YEAR('1992-10-26'));
输出结果为:1992
功能
返回两个日期之间相差的年数。
语法
YEARS_BETWEEN(date1, date2) RETURN INT
| 参数名 | 类型 | 说明 |
|---|---|---|
| date1 | DATE | 日期。 |
| date2 | DATE | 日期。 |
示例
DRS_SYS.PUT_LINE(YEARS_BETWEEN('1998-2-28', '1999-10-31'));
输出结果为:-1
功能
将二进制数据转换为原始字符串。
语法
BINTOCHAR(bin) RETURN VARCHAR
| 参数名 | 类型 | 说明 |
|---|---|---|
| bin | VARBINARY | 二进制数据。 |
示例
DRS_SYS.PUT_LINE(BINTOCHAR(0xB4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE));
输出结果为:达梦数据库有限公司
功能
将字符串转换为原始二进制数据。
语法
CHARTOBIN(s) RETURN VARBINARY
| 参数名 | 类型 | 说明 |
|---|---|---|
| s | VARCHAR | 字符串。 |
示例
DRS_SYS.PUT_LINE('0x', CHARTOBIN('达梦数据库有限公司'));
输出结果为:0xB4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE
功能
判断输入参数是否存在空值。
语法
HAS_NULL(...) RETURN BOOL
| 参数名 | 类型 | 说明 |
|---|---|---|
| 可变参数 | 基本数据类型 | 变量值。 |
功能
将原始字符串转换为十六进制字符串。
语法
HEX(s) RETURN VARCHAR
| 参数名 | 类型 | 说明 |
|---|---|---|
| s | VARCHAR | 字符串。 |
示例
DRS_SYS.PUT_LINE(HEX('abcd'));
输出结果为:61626364
功能
将十六进制字符串转换为二进制数据。
语法
HEXTORAW(s) RETURN VARBINARY
| 参数名 | 类型 | 说明 |
|---|---|---|
| s | VARCHAR | 十六进制字符串。 |
示例
DRS_SYS.PUT_LINE('0x', HEXTORAW('B4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE'));
输出结果为:0xB4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE
功能
判断输入参数是否均为空值。
语法
IS_NULL(...) RETURN BOOL
| 参数名 | 类型 | 说明 |
|---|---|---|
| 可变参数 | 基本数据类型 | 变量值。 |
功能
将二进制数据转换为十六进制字符串。
语法
RAWTOHEX(bin) RETURN VARCHAR
| 参数名 | 类型 | 说明 |
|---|---|---|
| bin | VARBINARY | 二进制数据。 |
示例
DRS_SYS.PUT_LINE('0x', RAWTOHEX(0xB4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE));
输出结果为:0xB4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE
功能
将十六进制字符串转换为原始字符串。
语法
UNHEX(s) RETURN VARCHAR
| 参数名 | 类型 | 说明 |
|---|---|---|
| s | VARCHAR | 十六进制字符串。 |
示例
DRS_SYS.PUT_LINE(UNHEX('61626364'));
输出结果为:abcd
文章
阅读量
获赞
