安全运维-达梦函数讲解

DM 数据库函数可以帮助用户更加方便地处理表中的数据。

函数不但可以在 SELECT 查询语句中使用,同样可以在 INSERT、UPDATE、DELETE 等语句中使用。

这些函数丰富了 SQL 的语言功能,为 DMSQL 提供了更多的操作性。

DM 数据库函数可以接受零个或者多个输入参数,并返回一个输出结果。

DM 数据库除了内置丰富的数据库函数外,也支持自定义函数,可为开发者扩展更多便捷的功能。

数值函数

序号函数名功能简要说明
1ABS(n)求数值 n 的绝对值
2ACOS(n)求数值 n 的反余弦值
3ASIN(n)求数值 n 的反正弦值
4ATAN(n)求数值 n 的反正切值
5ATAN2(n1,n2)求数值 n1/n2 的反正切值
6CEIL(n)求大于或等于数值 n 的最小整数
7CEILING(n)求大于或等于数值 n 的最小整数,等价于 CEIL(n)
8COS(n)求数值 n 的余弦值
9COSH(n)求数值 n 的双曲余弦值
10COT(n)求数值 n 的余切值
11DEGREES(n)求弧度 n 对应的角度值
12EXP(n)求数值 n 的自然指数
13FLOOR(n)求小于或等于数值 n 的最大整数
14GREATEST(n1,n2,n3)求 n1、n2 和 n3 三个数中最大的一个
15GREAT (n1,n2)求 n1、n2 两个数中最大的一个
16LEAST(n1,n2,n3)求 n1、n2 和 n3 三个数中最小的一个
17LN(n)求数值 n 的自然对数
18LOG(n1[,n2])求数值 n2 以 n1 为底数的对数
19LOG10(n)求数值 n 以 10 为底的对数
20MOD(m,n)求数值 m 被数值 n 除的余数
21PI()得到常数 π
22POWER(n1,n2)/POWER2(n1,n2)求数值 n2 以 n1 为基数的指数
23RADIANS(n)求角度 n 对应的弧度值
24RAND([n])求一个 0 到 1 之间的随机浮点数
25ROUND(n[,m])求四舍五入值函数
26SIGN(n)判断数值的数学符号
27SIN(n)求数值 n 的正弦值
28SINH(n)求数值 n 的双曲正弦值
29SQRT(n)求数值 n 的平方根
30TAN(n)求数值 n 的正切值
31TANH(n)求数值 n 的双曲正切值
32TO_NUMBER (char [,fmt])将 CHAR、VARCHAR、VARCHAR2 等类型的字符串转换为 DECIMAL 类型的数值
33TRUNC(n[,m])截取数值函数
34TRUNCATE(n[,m])截取数值函数,等价于 TRUNC(n[,m])
35TO_CHAR(n [, fmt [,’nls’ ] ])将数值类型的数据转换为 VARCHAR 类型输出
36BITAND(n1, n2)求两个数值型数值按位进行 AND 运算的结果

函数 ABS

查询现价小于 10 元或大于 20 元的信息。

SELECT PRODUCTID,NAME FROM PRODUCTION.PRODUCT WHERE ABS(NOWPRICE-15)>5;

函数 CEIL/CEILING

查询每本书的现价,要求为整数 CEIL/CEILING

SELECT PRODUCTID,NOWPRICE,CEIL(NOWPRICE) FROM PRODUCTION.PRODUCT WHERE ABS(NOWPRICE-15)>5;

函数 FLOOR

语法:FLOOR(n)

功能:返回小于等于 n 的最大整数值。n 必须是数值类型。返回类型与 n 的类型相同。

SELECT FLOOR(15.6);

函数 GREATEST

GREATEST(n {,n}) 功能:求一个或多个数中最大的数。

SELECT GREATEST(1.2,3.4,2.1);

函数 GREAT

语法:GREAT(n1,n2)

功能:求 n1、n2 中的最大的数。

SELECT GREAT (2, 4);

函数 LEAST

语法:LEAST(n {,n})

功能:求一个或多个数中最小的一个。

SELECT LEAST(1.2,3.4,2.1);

函数 RAND()

语法:RAND([n])

功能:返回一个[0,1]之间的随机浮点数。n 为数值类型,为生成随机数的种子,当 n 省略时,系统自动生成随机数种子。

SELECT RAND();

函数 ROUND

语法:ROUND(n [,m])

功能:返回四舍五入到小数点后面 m 位的 n 值。m 应为一个整数,缺省值为 0,m 为负 整数则四舍五入到小数点的左边,m 为正整数则四舍五入到小数点的右边。若 m 为小数,系 统将自动将其转换为整数。

SELECT NOWPRICE,ROUND(NOWPRICE) FROM PRODUCTION.PRODUCT;

函数 SIGN

语法:SIGN(n)

功能:如果 n 为正数,SIGN(n)返回 1,如果 n 为负数,SIGN(n)返回-1,如果 n 为 0,SIGN(n)返回 0。

SELECT ROUND(NOWPRICE),SIGN(ROUND(NOWPRICE)-20) FROM PRODUCTION.PRODUCT;

字符串函数

序号函数名功能简要说明
1ASCII(char)返回字符对应的整数
2ASCIISTR(char)将字符串 char 中,非 ASCII 的字符转成 \XXXX (UTF-16) 格式,ASCII 字符保持不变
3BIT_LENGTH(char)求字符串的位长度
4CHAR(n)返回整数 n 对应的字符
5CHAR_LENGTH(char)/CHARACTER_LENGTH(char)求字符串的串长度
6CHR(n)返回整数 n 对应的字符,等价于 CHAR(n)
7CONCAT(char1,char2,char3,…)顺序联结多个字符串成为一个字符串
8DIFFERENCE(char1,char2)比较两个字符串的 SOUNDEX 值之差异,返回两个 SOUNDEX 值串同一位置出现相同字符的个数。
9INITCAP(char)将字符串中单词的首字符转换成大写的字符
10INS(char1,begin,n,char2)删除在字符串 char1 中以 begin 参数所指位置开始的n 个字符,再把 char2 插入到 char1 串的 begin 所指位置
11INSERT(char1,n1,n2,char2)/INSSTR(char1,n1,n2,char2)将字符串 char1 从 n1 的位置开始删除 n2 个字符,并将 char2 插入到 char1 中 n1 的位置
12INSTR(char1,char2[,n,[m]])从输入字符串 char1 的第 n 个字符开始查找字符串char2 的第 m 次出现的位置,以字符计算
13INSTRB(char1,char2[,n,[m]])从 char1 的第 n 个字节开始查找字符串 char2 的第 m次出现的位置,以字节计算
14LCASE(char)将大写的字符串转换为小写的字符串
15LEFT(char,n) /LEFTSTR(char,n)返回字符串最左边的 n 个字符组成的字符串
16LEN(char)返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中不包含尾随空格
17LENGTH(char)返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中包含尾随空格
18OCTET_LENGTH(char)返回输入字符串的字节数
19LOCATE(char1,char2[,n])返回 char1 在 char2 中首次出现的位置
20LOWER(char)将大写的字符串转换为小写的字符串
21LPAD(char1,n,char2)在输入字符串的左边填充上 char2 指定的字符,将其拉伸至 n 个字节长度
22LTRIM(char1,char2)从输入字符串中删除所有的前导字符,这些前导字符由
23POSITION(char1,/ IN char2)求串 1 在串 2 中第一次出现的位置
24REPEAT(char,n) /REPEATSTR(char,n)返回将字符串重复 n 次形成的字符串
25REPLACE(STR, search[,replace] )将输入字符串 STR 中所有出现的字符串 search 都替换成字符串 replace,其中 STR 为 char、clob 或 text 类型
26REPLICATE(char,times)把字符串 char 自己复制 times 份
27REVERSE(char)将字符串反序
28RIGHT / RIGHTSTR(char,n)返回字符串最右边 n 个字符组成的字符串
29RPAD(char1,n,char2)类似 LPAD 函数,只是向右拉伸该字符串使之达到 n 个字节长度
30RTRIM(char1,char2)从输入字符串的右端开始删除 char2 参数中的字符
31SOUNDEX(char)返回一个表示字符串发音的字符串
32SPACE(n)返回一个包含 n 个空格的字符串
33STRPOSDEC(char)把字符串 char 中最后一个字符的值减一
34STRPOSDEC(char,pos)把字符串 char 中指定位置 pos 上的字符值减一
35STRPOSINC(char)把字符串 char 中最后一个字符的值加一
36STRPOSINC(char,pos)把字符串 char 中指定位置 pos 上的字符值加一
37STUFF(char1,begin,n,char2)删除在字符串 char1 中以 begin 参数所指位置开始的 n 个字符,再把 char2 插入到 char1 串的 begin 所指位置
38SUBSTR(char,m,n)/ SUBSTRING(char FROM m [FORn])返回 char 中从字符位置 m 开始的 n 个字符
39SUBSTRB(char,n,m)SUBSTR 函数等价的单字节形式
40TO_CHAR(character)将 VARCHAR、CLOB、TEXT 类型的数据转化为 VARCHAR 类型输出
41TRANSLATE(char,from,to)将所有出现在搜索字符集中的字符转换成字符集中的相应字符
42TRIM([LEADING|TRAILING|BOTH] [exp] [] FROM char2])删去字符串 char2 中由串 char1 指定的字符
43UCASE(char)将小写的字符串转换为大写的字符串
44UPPER(char)将小写的字符串转换为大写的字符串
45REGEXP根据符合 POSIX 标准的正则表达式进行字符串匹配
46OVERLAY(char1 PLACINGchar2 FROM int [FOR int])字符串覆盖函数,用 char2 覆盖 char1 中指定的子串,返回修改后的 char1
47TEXT_EQUAL返回两个 LONGVARCHAR 类型的值的比较结果,相同返回 1,否则返回 0
48BLOB_EQUAL返回两个 LONGVARBINARY 类型的值的比较结果,相同返回 1,否则返回 0
49NLSSORT(str1[,nls_sort=str2])返回对汉字排序的编码
50GREATEST(char1, char2,char3)求 char 1、char 2 和 char 3 中最大的字符串
51GREAT (char1, char2)求 char 1、char 2 中最大的字符串
52TO_SINGLE_BYTE (char)将多字节形式的字符(串)转换为对应的单字节形式
53TO_MULTI_BYTE (char)将单字节形式的字符(串)转换为对应的多字节形式
54EMPTY_CLOB ()初始化 clob 字段
55EMPTY_BLOB ()初始化 blob 字段
56UNISTR (char)将字符串 char 中,ascii 码(‗\XXXX‘4 个 16 进制字符格式)转成本地字符。对于其他字符保持不变。
57ISNULL(char)判断表达式是否为 NULL

函数 CHAR_LENGTH / CHARACTER_LENGTH

语法:CHAR_LENGTH(char) 或 CHARACTER_LENGTH(char)

功能:返回字符串 char 的长度,以字符作为计算单位,一个汉字作为一个字符计算。 字符串尾部的空格也计数。

SELECT NAME,CHAR_LENGTH(TRIM(BOTH ' ' FROM NAME)) FROM PRODUCTION.PRODUCT;

函数 CONCAT

语法:CONCAT(char1,char2,char3…)

功能:返回多个字符串顺序联结成的一个字符串,该函数等价于连接符||。

SELECT PRODUCTID,NAME, PUBLISHER, CONCAT(PRODUCTID,NAME,PUBLISHER) FROM PRODUCTION.PRODUCT;

函数 INITCAP

语法:INITCAP(char)

功能:返回句子字符串中,每一个单词的第一个字母改为大写,其他字母改为小写。单词用空格分隔,不是字母的字符不受影响。

SELECT INITCAP('hello world'); Hello World

函数 INS/INSERT/

语法: INS(char1,begin,n,char2)

功能:删除在字符串 char1 中以 begin 参数所指位置开始的 n 个字符, 再把 char2 插入到 char1 串的 begin 所指位置。begin 和 n 为数值参数。

SELECT INS ('abcdefg',1,3, 'kkk') ;

函数 LCASE/LOWER

语法:LCASE(char)

功能:返回字符串中,所有字母改为小写,不是字母的字符不受影响。

SELECT LCASE('ABC');

函数 LEFT / LEFTSTR

语法:LEFT(char,n) / LEFTSTR(char,n)

功能:返回字符串最左边的 n 个字符组成的字符串。

SELECT NAME,LEFT(NAME,2) FROM PRODUCTION.PRODUCT

函数 LEN

语法:LEN(char)

功能:返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。

SELECT LEN ('hi,你好□□');

函数 REPEAT / REPEATSTR

语法:REPEAT(char,n) / REPEATSTR(char,n)

功能:返回将字符串重复 n 次形成的字符串。

SELECT REPEAT ('Hello ',3);

函数 REPLACE

语法:REPLACE(str, search [,replace])

功能:str 为 CHAR、CLOB 和 TEXT 类型,search 和 replace 为字符串类型。在 str 中找到字符串 search,替换成 replace。若 replace 为空,则在 str 中删除所有 search。

SELECT NAME,REPLACE(NAME, '地址', '地点') FROM PERSON.ADDRESS_TYPE;

函数 REVERSE

语法:REVERSE(char)

功能:将输入字符串的字符顺序反转后返回。

SELECT REVERSE('abcd');

函数 RIGHT / RIGHTSTR

语法:RIGHT(char,n) / RIGHTSTR(char,n)

功能:返回字符串最右边 n 个字符组成的字符串。

SELECT NAME, RIGHT (NAME,2) FROM PERSON.ADDRESS_TYPE;

函数 SUBSTR/SUBSTRING

语法:SUBSTR(char[,m[,n]]) / SUBSTRING(char[ from m [ for n ]])

功能:返回 char 中从字符位置 m 开始的 n 个字符。若 m 为 0,则把 m 就当作 1 对待。 若 m 为正数,则返回的字符串是从左边到右边计算的;反之,返回的字符是从 char 的结尾 向左边进行计算的。如果没有给出 n,则返回 char 中从字符位置 m 开始的后续子串。如果 n 小于 0,则返回 NULL。如果 m 和 n 都没有给出,返回 char。函数以字符作为计算单位, 一个西文字符和一个汉字都作为一个字符计算。

SELECT NAME,SUBSTRING(NAME FROM 3 FOR 2) FROM PRODUCTION.PRODUCT;

函数 TRIM

语法:TRIM([< [char] | char> FROM] str)

功能:TRIM 从 str 的首端(LEADING)或末端(TRAILING)或两端 (BOTH)删除 char 指定的字符,如果任何一个变量是 NULL,则返回 NULL。默认的修剪方 向为 BOTH,默认的修剪字符为空格。函数返回值类型与 str 类型保持一致。

SELECT NAME,TRIM(TRAILING '址' FROM NAME) FROM PERSON.ADDRESS_TYPE;

SELECT TRIM(LEADING FROM ' Hello World ');

SELECT TRIM(BOTH FROM ' Hello World ');

函数 UCASE/UPPER

语法:UCASE(char)

功能:返回的字符串中,所有字母改为大写,不是字母的字符不受影响。

SELECT UCASE('hello world');

函数 GREATEST

语法:GREATEST(char {,char})

功能:求一个或多个字符串中最大的字符串。

SELECT GREATEST('abb','abd', 'abc');

函数 ISNULL

语法:ISNULL(char) 功能:判断表达式是否为NULL,为NULL返回1,否则返回0。

查询总经理的 MANAGERID 是否为空: SELECT ISNULL(MANAGERID) FROM RESOURCES.EMPLOYEE WHERE TITLE='总经理';

函数 CONCAT_WS

语法:CONCAT_WS(delim, char1,char2,char3,…)

功能:顺序联结多个字符串成为一个字符串,并用delim分割。 如果delim取值为NULL,则返回NULL。如果其它参数为NULL,在执行拼接过程中跳 过取值为NULL的参数。

SELECT CONCAT_WS(',,','11','22','33');

函数 FIND_IN_SET

语法:FIND_IN_SET(char, charlist[,separator])

功能:查询 charlist 中是否包含 char,返回 char 在 charlist 中第一次出现的 位置或 NULL。 char 为待查询的字符串,charlist 为字符串列表,separator 为分隔符,缺省 为‖,‖。字符串列表由 N 个被分隔符分隔的字符串组成,字符串可为空字符串。若 char 不 在 charlist 中或 charlist 为空字符串,则返回 0;若任一参数为 NULL,则返回值为 NULL;否则返回位于 1 到 N 中的数值。

SELECT FIND_IN_SET('', ''); 查询结果为:0

SELECT FIND_IN_SET(' ', ' '); 查询结果为:1

SELECT FIND_IN_SET('b', 'a,b,c'); 查询结果为:2

SELECT FIND_IN_SET('', 'a,b,,'); 查询结果为:3

SELECT FIND_IN_SET('ab', 'q8w8es8zcd8t8ab','8'); 查询结果为:6

SELECT FIND_IN_SET(NULL, ''); 查询结果为:NULL

日期时间函数

序号函数名功能简要说明
1ADD_DAYS(date,n)返回日期加上 n 天后的新日期
2ADD_MONTHS(date,n)在输入日期上加上指定的几个月返回一个新日期
3ADD_WEEKS(date,n)返回日期加上 n 个星期后的新日期
4CURDATE()返回系统当前日期
5CURTIME(n)返回系统当前时间
6CURRENT_DATE()返回系统当前日期
7CURRENT_TIME(n)返回系统当前时间
8CURRENT_TIMESTAMP(n)返回系统当前带会话时区信息的时间戳
9DATEADD(datepart,n,date)向指定的日期加上一段时间
10DATEDIFF(datepart,date1,date2)返回跨两个指定日期的日期和时间边界数
11DATEPART(datepart,date)返回代表日期的指定部分的整数
12DAY(date)返回日期中的天数
13DAYNAME(date)返回日期的星期名称
14DAYOFMONTH(date)返回日期为所在月份中的第几天
15DAYOFWEEK(date)返回日期为所在星期中的第几天
16DAYOFYEAR(date)返回日期为所在年中的第几天
17DAYS_BETWEEN(date1,date2)返回两个日期之间的天数
18EXTRACT(时间字段 FROM date)抽取日期时间或时间间隔类型中某一个字段的值
19GETDATE(n)返回系统当前时间戳
20GREATEST(date1,date2,date3)求 date1、 date2 和 date3 中的最大日期
21GREAT (date1,date2)求 date1、 date2 中的最大日期
22HOUR(time)返回时间中的小时分量
23LAST_DAY(date)返回输入日期所在月份最后一天的日期
24LEAST(date1, date2, date3)求 date1、 date2 和 date3 中的最小日期
25MINUTE(time)返回时间中的分钟分量
26MONTH(date)返回日期中的月份分量
27MONTHNAME(date)返回日期中月分量的名称
28MONTHS_BETWEEN(date1,date2)返回两个日期之间的月份数
29NEXT_DAY(date1,char2)返回输入日期指定若干天后的日期
30NOW(n)返回系统当前时间戳
31QUARTER(date)返回日期在所处年中的季节数
32SECOND(time)返回时间中的秒分量
33ROUND (date1[, fmt])把日期四舍五入到最接近格式元素指定的形式
34TIMESTAMPADD(datepart,n,timestamp)返回时间戳 timestamp 加上 n 个 datepart 指定的时间段的结果
35TIMESTAMPDIFF(datepart,timeStamp1,timestamp2)返回一个表明 timestamp2 与 timestamp1 之间的指定 datepart 类型时间间隔的整数
36SYSDATE()返回系统的当前日期
37TO_DATE(CHAR[,fmt[,’nls’]]) /TO_TIMESTAMP(CHAR[,fmt[,’nls’]]) /TO_TIMESTAMP_TZ(CHAR[,fmt])字符串转换为日期时间数据类型
38FROM_TZ(timestamp,timezone|tz_name])将时间戳类型 timestamp 和时区类型 timezone(或时区名称 tz_name )转化为 timestamp withtimezone 类型
39TRUNC(date[,fmt])把日期截断到最接近格式元素指定的形式
40WEEK(date)返回日期为所在年中的第几周
41WEEKDAY(date)返回当前日期的星期值
42WEEKS_BETWEEN(date1,date2)返回两个日期之间相差周数
43YEAR(date)返回日期的年分量
44YEARS_BETWEEN(date1,date2)返回两个日期之间相差年数
45LOCALTIME(n)返回系统当前时间
46LOCALTIMESTAMP(n)返回系统当前时间戳
47OVERLAPS返回两个时间段是否存在重叠
48TO_CHAR(date[,fmt[,nls]])将日期数据类型 DATE 转换为一个在日期语法 fmt 中指定语法的 VARCHAR 类型字符串。
49SYSTIMESTAMP(n)返回系统当前带数据库时区信息的时间戳
50NUMTODSINTERVAL(dec,interval_unit)转换一个指定的 DEC 类型到 INTERVAL DAY TOSECOND
51NUMTOYMINTERVAL(dec,interval_unit)转换一个指定的 DEC 类型值到 INTERVAL YEAR TOMONTH
52WEEK(date, mode)根据指定的 mode 计算日期为年中的第几周
53UNIX_TIMESTAMP (datetime)返回自标准时区的’1970-01-01 00:00:00 +0:00’的到本地会话时区的指定时间的秒数差
54FROM_UNIXTIME(unixtime)返回将自’1970-01-01 00:00:00’的秒数差转成本地会话时区的时间戳类型
55FROM_UNIXTIME(unixtime,fmt)将自’1970-01-01 00:00:00’的秒数差转成本地会话时区的指定 fmt 格式的时间串
56SESSIONTIMEZONE返回当前会话的时区
57DATE_FORMAT(d, format)以不同的格式显示日期/时间数据
58TIME_TO_SEC(d)将时间换算成秒
59SEC_TO_TIME(sec)将秒换算成时间
60TO_DAYS(timestamp)转换成公元 0 年 1 月 1 日的天数差

日期时间函数的参数至少有一个是日期时间类型(TIME,DATE,TIMESTAMP),返回 值一般为日期时间类型和数值类型。

函数 ADD_DAYS

语法:ADD_DAYS( date, n)

功能:返回日期 date 加上相应天数 n 后的日期值。n 可以是任意整数,date 是日期 类型(DATE)或时间戳类型(TIMESTAMP),返回值为日期类型(DATE)。

SELECT ADD_DAYS( DATE '2000-01-12',1);

函数 ADD_MONTHS

语法:ADD_MONTHS(date,n)

功能:返回日期 date 加上 n 个月的日期时间值。n 可以是任意整数,date 是日期类 型(DATE)或时间戳类型(TIMESTAMP),返回类型固定为日期类型(DATE)。如果相加之后 的结果日期中月份所包含的天数比 date 日期中的日分量要少,那么结果日期的该月最后一天被返回。

SELECT ADD_MONTHS(DATE '2000-01-31',1); 查询结果为:2000-02-29

SELECT ADD_MONTHS(TIMESTAMP '2000-01-31 20:00:00',1); 查询结果为:2000-02-29

函数 ADD_WEEKS

语法:ADD_WEEKS( date, n)

功能:返回日期 date 加上相应星期数 n 后的日期值。n 可以是任意整数,date 是日 期类型(DATE)或时间戳类型(TIMESTAMP),返回类型固定为日期类型(DATE)。

SELECT ADD_WEEKS( DATE '2000-01-12',1); 查询结果为: 2000-01-19

函数 CURDATE/CURTIME/CURRENT_DATE/CURRENT_TIME/CURRENT_TIMESTAMP

语法:CURDATE()

功能:返回当前日期值,结果类型为 DATE。

SELECT CURDATE(); 查询结果为:执行此查询当天日期,如 2003-02-2

函数 DATEADD

语法:DATEADD(datepart,n,date)

功能:向指定的日期 date 加上 n 个 datepart 指定的时间段,返回新的 timestamp

SELECT DATEADD(HH, 4, '2022-09-19 16:09:35'); 查询结果为:2022-09-19 20:09:35.000000

SELECT DATEADD(SS, 10, '14:05:47.555'); 查询结果为:1900-01-01 14:05:57.555000

SELECT DATEADD(WW, 15, '2000-06-09'); 查询结果为:2000-09-22 00:00:00.000000

函数 DATEDIFF/BIGDATEDIFF

语法:DATEDIFF(datepart,date1,date2)

功能:返回跨两个指定日期的日期和时间边界数。 注:当结果超出整数值范围,DATEDIFF 会产生错误。对于微秒 MICROSECOND,最大 数是 35 分 47.483647 秒;对于毫秒 MILLISECOND,最大数是 24 天 20 小时 31 分 钟 23.647 秒;对于秒,最大数是 68 年。若想提高可以表示的范围,可以使用 BIGDATEDIFF,其使用方法与 DATEDIFF 函数一致,只是可以表示更广范围的微秒、毫秒 和秒。

SELECT DATEDIFF(QQ, '2003-06-01', DATE '2002-01-01'); 查询结果为:-5

SELECT DATEDIFF(MONTH, '2001-06-01', DATE '2002-01-01'); 查询结果为:7

SELECT DATEDIFF(WK, DATE '2003-02-07',DATE '2003-02-14'); 查询结果为:1

SELECT DATEDIFF(MS,'2003-02-14 12:10:10.000','2003-02-14 12:09:09.300'); 查询结果为:-60700

函数 DATEPART/DATE_PART

语法:DATEPART(datepart,date)

功能:返回代表日期 date 的 指 定 部 分 的 整 数 。

SELECT DATEPART(SECOND, DATETIME '2000-02-02 13:33:40.00'); 查询结果为:40

SELECT DATEPART(DY, '2000-02-02'); 查询结果为:33

SELECT DATEPART(WEEKDAY, '2002-02-02'); 查询结果为:7

函数 DAY

语法:DAY(date)

功能:返回指定日期在月份中的天数

SELECT DAY('2016-06-07'); 查询结果为:7

  • DAYNAME 返回日期的星期名称。 SELECT DAYNAME(DATE '2012-01-01'); 查询结果为:Sunday

  • DAYOFMONTH 返回日期为所处月份中的第几天。 SELECT DAYOFMONTH('2003-01-03'); 查询结果为:3

  • DAYOFWEEK 返回日期为所处星期中的第几天。 SELECT DAYOFWEEK('2003-01-01');

  • DAYOFYEAR 返回日期为所处年中的第几天。 SELECT DAYOFYEAR('2003-03-03'); 查询结果为:62

  • DAYS_BETWEEN 返回两个日期之间相差的天数。 SELECT DAYS_BETWEEN('2022-06-01','2021-10-01'); 查询结果为:243

函数 GREATEST

语法:GREATEST(date {,date})

功能:求一个或多个日期中的最大日期。

SELECT GREATEST(date'1999-01-01',date'1998-01-01',date'2000-01-01'); 查询结果为:2000-01-01

函数 HOUR

语法:HOUR(time)

功能:返回时间中的小时分量。

SELECT HOUR(TIME '20:10:16'); 查询结果为:20

函数 LAST_DAY

语法:LAST_DAY(date)

功能:返回 date 所在月最后一天的日期,date 是日期类型(DATE)或时间戳类型 (TIMESTAMP),返回类型与 date 相同。

SELECT LAST_DAY(SYSDATE) "Days Left"

函数 LEAST

语法:LEAST(date {,date})

功能:求一个或多个日期中的最小日期。

SELECT LEAST(date'1999-01-01',date'1998-01-01',date'2000-01-01'); 查询结果为:1998-01-01


  • MINUTE(time) 返回时间中的分钟分量。

  • MONTH(date) 返回日期中的月份分量。

  • MONTHNAME(date) 返回日期中月份分量的名称。

  • QUARTER(date) 返回日期在所处年中的季度数。

  • SECOND(time) 返回时间中的秒分量。

  • WEEK(date) 返回指定日期属于所在年中的第几周。

  • WEEKDAY(date) 返回指定日期的星期值,如果是星期日则返回 0。

  • WEEKS_BETWEEN(date1,date2) 返回两个日期之间相差周数。

  • YEAR(date) 返回日期中的年分量。

  • YEARS_BETWEEN(date1,date2) 返回两个日期之间相差年数。


函数MONTHS_BETWEEN

语法:MONTHS_BETWEEN(date1,date2)

功能:返回 date1 和 date2 之间的月份值。如果 date1 比 date2 晚,返回正值,否 则返回负值。如果 date1 和 date2 这两个日期为同一天,或者都是所在月的最后一天,则 返回整数,否则返回值带有小数。date1 和 date2 是日期类型(DATE)或时间戳类型 (TIMESTAMP)。

SELECT MONTHS_BETWEEN(DATE '1995-02-28', DATE '1995-01-31') "Months"; 查询结果为:1.0

函数 NEXT_DAY

语法:NEXT_DAY(date,char)

功能:返回在日期 date 之后满足由 char 给出的条件的第一天。char 指定了一周中 的某一个天(星期几),返回值的时间分量与 date 相同,char 是大小写无关的。

SELECT NEXT_DAY(DATE '2001-08-02', 'MONDAY'); 查询结果为:2001-08-06

SELECT NEXT_DAY('2001-08-02 12:00:00', 'FRI'); 查询结果为:2001-08-03

函数 NOW

语法:NOW(n)

功能:返回系统的当前时间戳。等价于 GETDATE()。 参数:n:指定小数秒精度。取值范围 0~9,缺省为 6。

函数 DATE_ADD

语法:DATE_ADD(d datetime, expr interval)

功能:返回一个日期或时间值加上一个时间间隔的时间值。

SELECT DATE_ADD('2020-07-12 12:20:30',INTERVAL '2 1 ' DAY TO SECOND); 查询结果为: 2020-07-14 13:20:30.000000

函数 DATE_SUB

语法:DATE_SUB(d datetime, expr interval)

功能:返回一个日期或时间值减去一个时间间隔的时间值。

SELECT DATE_SUB('2020-07-12 12:20:30',INTERVAL '2 1 ' DAY TO SECOND); 查询结果为: 2020-07-10 11:20:30.000000

空值判断函数

序号函数名功能简要说明
1COALESCE(n1,n2,…nx)返回第一个非空的值
2IFNULL(n1,n2)当 n1 为非空时,返回 n1;若 n1 为空,则返回 n2
3ISNULL(n1,n2)当 n1 为非空时,返回 n1;若 n1 为空,则返回 n2
4NULLIF(n1,n2)如果 n1=n2 返回 NULL,否则返回 n1

函数 COALESCE

语法:COALESCE(n1,n2,…,nx) 功能:返回其参数中第一个非空的值,i。

以下是分别返回不同传入值的情况。

SELECT COALESCE(1,NULL); 查询结果为:1

SELECT COALESCE(NULL,TIME '12:00:00',TIME '11:00:00'); 查询结果为:12:00:00

SELECT COALESCE(NULL,NULL,NULL,NULL); 查询结果为:NULL

杂类函数

序号函数名功能简要说明
1DECODE(exp, search1,result1, … searchn, resultn[,default])查表译码
2ISDATE(exp)判断表达式是否为有效的日期
3ISNUMERIC(exp)判断表达式是否为有效的数值
4DM_HASH (exp)根据给定表达式生成 HASH 值
5LNNVL(condition)根据表达式计算结果返回布尔值
6LENGTHB(value)返回 value 的字节数
7FIELD(value, e1, e2, e3,e4…en)返回 value 在列表 e1,e2,e3,e4…en 中的位置序号,不在输入列表时则返回 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值