注册
达梦数据复制软件DMDRS DRS语言使用:DMDRS函数(二)
专栏/数+融合专栏/ 文章详情 /

达梦数据复制软件DMDRS DRS语言使用:DMDRS函数(二)

达梦数+数据融合软件(DMDF)产品团队 2026/07/29 174 0 0
摘要 介绍DMDRS DRS语言的DMDRS函数,包括日期时间函数和其他函数。

6 DMDRS函数

7 日期时间函数

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秒之后的时间舍取为下一分

7.1 ADD_DAYS

功能

返回日期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

7.2 ADD_MONTHS

功能

返回日期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

7.3 ADD_WEEKS

功能

返回日期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

7.4 CURDATE

功能

返回系统当前日期。

语法

CURDATE() RETURN DATE

示例

DRS_SYS.PUT_LINE(CURDATE());

输出结果为:2023-05-01

7.5 CURTIME

功能

返回系统当前时间。精度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

7.6 CURRENT_DATE

功能

返回系统当前日期。同函数CURDATE。

7.7 CURRENT_TIME

功能

返回系统当前时间。精度n取值范围:0~6,默认值为 6。同函数CURTIME。

7.8 CURRENT_TIMESTAMP

功能

返回系统当前时间戳。精度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

7.9 DATEADD

功能

返回日期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

7.10 DATEDIFF

功能

返回两个日期之间相差的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

7.11 DATEPART

功能

返回时间日期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

7.12 DATE_PART

功能

返回日期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

7.13 DAY

功能

返回日期date在所处月份中的第几天。

语法

DAY(date) RETURN INT
参数名 类型 说明
date DATE 日期。

示例

DRS_SYS.PUT_LINE(DAY('2016-06-27'));

输出结果为:27

7.14 DAYNAME

功能

返回日期date的星期名称。

语法

DAYNAME(date) RETURN VARCHAR(16)
参数名 类型 说明
date DATE 日期。

示例

DRS_SYS.PUT_LINE(DAYNAME('2012-01-01'));

输出结果为:Sunday

7.15 DAYOFMONTH

功能

返回日期date在所处月份中的第几天。同函数DAY。

7.16 DAYOFWEEK

功能

返回日期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

7.17 DAYOFYEAR

功能

返回日期date在所处年份中的第几天。

语法

DAYOFYEAR(date) RETURN INT
参数名 类型 说明
date DATE 日期。

示例

DRS_SYS.PUT_LINE(DAYOFYEAR('2003-03-03'));

输出结果为:62

7.18 DAYS_BETWEEN

功能

返回两个日期之间相差的天数。

语法

DAYS_BETWEEN(date1, date2) RETURN INT
参数名 类型 说明
date1 DATE 日期。
date2 DATE 日期。

示例

DRS_SYS.PUT_LINE(DAYS_BETWEEN('2003-03-03', '2003-03-04'));

输出结果为:-1

7.19 GETDATE

功能

返回系统当前时间戳。精度n取值范围 0-6,默认为 6。同函数CURRENT_TIMASTAMP。

7.20 GREATEST

功能

返回多个日期中的最大日期。

语法

GREATEST(date1, ...) RETURN DATE
参数名 类型 说明
date1 DATE 日期。
可变参数 DATE 日期。

示例

DRS_SYS.PUT_LINE(GREATEST('1998-01-01', '2000-01-01', '1999-01-01'));

输出结果为:2000-01-01

7.21 GREAT

功能

返回两个日期中的最大日期。

语法

GREAT(date1, date2) RETURN DATE
参数名 类型 说明
date1 DATE 日期。
date2 DATE 日期。

示例

DRS_SYS.PUT_LINE(GREAT('1998-01-01', '1999-01-01'));

输出结果为:1999-01-01

7.22 HOUR

功能

返回时间中的小时分量。

语法

HOUR(time) RETURN INT
参数名 类型 说明
time TIME 时间。

示例

DRS_SYS.PUT_LINE(HOUR('21:10:16'));

输出结果为:21

7.23 LAST_DAY

功能

返回日期date所在月最后一天的日期。

语法

LAST_DAY(date) RETURN DATE
参数名 类型 说明
date DATE 日期。

示例

DRS_SYS.PUT_LINE(LAST_DAY('2008-02-11 12:00:00'));

输出结果为:2008-02-29

7.24 LEAST

功能

返回多个日期中的最小日期。

语法

LEAST(date1, ...) RETURN DATE
参数名 类型 说明
date1 DATE 日期。
可变参数 DATE 日期。

示例

DRS_SYS.PUT_LINE(LEAST('1998-01-01', '2000-01-01', '1999-01-01'));

输出结果为:1998-01-01

7.25 LOCALTIME

功能

返回系统当前时间。精度n取值范围: 0~6,默认值为 6。同函数CURTIME。

7.26 LOCALTIMESTAMP

功能

返回系统当前时间戳。精度n取值范围 0~6,默认值为 6。同函数CURRENT_TIMASTAMP。

7.27 MINUTE

功能

返回时间time中的分钟分量。

语法

MINUTE(time) RETURN INT
参数名 类型 说明
time TIME 时间。

示例

DRS_SYS.PUT_LINE(MINUTE('20:10:16'));

输出结果为:10

7.28 MONTH

功能

返回日期date中的月份分量。

语法

MONTH(date) RETURN INT
参数名 类型 说明
date DATE 日期。

示例

DRS_SYS.PUT_LINE(MONTH('2002-11-12'));

输出结果为:11

7.29 MONTHNAME

功能

返回日期date中月份分量的名称。

语法

MONTHNAME(date) RETURN VARCHAR(16)
参数名 类型 说明
date DATE 日期。

示例

DRS_SYS.PUT_LINE(MONTHNAME('2002-11-12'));

输出结果为:November

7.30 MONTHS_BETWEEN

功能

返回两个日期之间相差的月数。如果均为所在月的同一天或者最后一天, 则为整数。否则按照一个月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

7.31 NEXT_DAY

功能

返回日期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

7.32 NOW

功能

返回系统当前时间戳。精度n取值范围:0~6,默认值为 6。同函数CURRENT_TIMASTAMP。

7.33 QUARTER

功能

返回日期date在所处年份中的第几个季度。

语法

QUARTER(date) RETURN INT
参数名 类型 说明
date DATE 日期。

示例

DRS_SYS.PUT_LINE(QUARTER('2002-08-01'));

输出结果为:3

7.34 ROUND

功能

将时间日期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

7.35 SECOND

功能

返回时间time中的秒分量。

语法

SECOND(time) RETURN INT
参数名 类型 说明
time TIME 时间。

示例

DRS_SYS.PUT_LINE(SECOND('08:10:25.300'));

输出结果为:25

7.36 SYSDATE

功能

获取当前系统日期。

语法

SYSDATE() RETURN TIMESTAMP(0)

7.37 TIMESTAMPADD

功能

返回时间戳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

7.38 TIMESTAMPDIFF

功能

返回两个时间戳之间相差的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

7.39 TO_DATE

功能

将字符串s转换成日期。

语法

TO_DATE(str) RETURN DATE
参数名 类型 说明
str VARCHAR(32) 日期字符串。

7.40 TO_TIMESTAMP

功能

将字符串s转换成时间戳。

语法

TO_TIMESTAMP(str) RETURN TIMESTAMP(6)
参数名 类型 说明
str VARCHAR(32) 时间戳字符串。

7.41 TRUNC

功能

将时间日期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

7.42 WEEK

功能

返回日期date在所处年份中的第几周。

语法

WEEK(date) RETURN INT
参数名 类型 说明
date DATE 日期。

示例

DRS_SYS.PUT_LINE(WEEK('1992-10-26'));

输出结果为:44

7.43 WEEKDAY

功能

返回指定日期的星期值。如果是星期日则返回 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

7.44 WEEKS_BETWEEN

功能

返回两个日期之间相差的周数。

语法

WEEKS_BETWEEN(date1, date2) RETURN INT
参数名 类型 说明
date1 DATE 日期。
date2 DATE 日期。

示例

DRS_SYS.PUT_LINE(WEEKS_BETWEEN('1998-2-28', '1998-2-22'));

输出结果为:0

7.45 YEAR

功能

返回日期date中的年分量。

语法

YEAR(date) RETURN INT
参数名 类型 说明
date DATE 日期。

示例

DRS_SYS.PUT_LINE(YEAR('1992-10-26'));

输出结果为:1992

7.46 YEARS_BETWEEN

功能

返回两个日期之间相差的年数。

语法

YEARS_BETWEEN(date1, date2) RETURN INT
参数名 类型 说明
date1 DATE 日期。
date2 DATE 日期。

示例

DRS_SYS.PUT_LINE(YEARS_BETWEEN('1998-2-28', '1999-10-31'));

输出结果为:-1

8 其他函数

8.1 BINTOCHAR

功能

将二进制数据转换为原始字符串。

语法

BINTOCHAR(bin) RETURN VARCHAR
参数名 类型 说明
bin VARBINARY 二进制数据。

示例

DRS_SYS.PUT_LINE(BINTOCHAR(0xB4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE));

输出结果为:达梦数据库有限公司

8.2 CHARTOBIN

功能

将字符串转换为原始二进制数据。

语法

CHARTOBIN(s) RETURN VARBINARY
参数名 类型 说明
s VARCHAR 字符串。

示例

DRS_SYS.PUT_LINE('0x', CHARTOBIN('达梦数据库有限公司'));

输出结果为:0xB4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE

8.3 HAS_NULL

功能

判断输入参数是否存在空值。

语法

HAS_NULL(...) RETURN BOOL
参数名 类型 说明
可变参数 基本数据类型 变量值。

8.4 HEX

功能

将原始字符串转换为十六进制字符串。

语法

HEX(s) RETURN VARCHAR
参数名 类型 说明
s VARCHAR 字符串。

示例

DRS_SYS.PUT_LINE(HEX('abcd'));

输出结果为:61626364

8.5 HEXTORAW

功能

将十六进制字符串转换为二进制数据。

语法

HEXTORAW(s) RETURN VARBINARY
参数名 类型 说明
s VARCHAR 十六进制字符串。

示例

DRS_SYS.PUT_LINE('0x', HEXTORAW('B4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE'));

输出结果为:0xB4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE

8.6 IS_NULL

功能

判断输入参数是否均为空值。

语法

IS_NULL(...) RETURN BOOL
参数名 类型 说明
可变参数 基本数据类型 变量值。

8.7 RAWTOHEX

功能

将二进制数据转换为十六进制字符串。

语法

RAWTOHEX(bin) RETURN VARCHAR
参数名 类型 说明
bin VARBINARY 二进制数据。

示例

DRS_SYS.PUT_LINE('0x', RAWTOHEX(0xB4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE));

输出结果为:0xB4EFC3CECAFDBEDDBFE2D3D0CFDEB9ABCBBE

8.8 UNHEX

功能

将十六进制字符串转换为原始字符串。

语法

UNHEX(s) RETURN VARCHAR
参数名 类型 说明
s VARCHAR 十六进制字符串。

示例

DRS_SYS.PUT_LINE(UNHEX('61626364'));

输出结果为:abcd

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服