DM 数据库函数可以帮助用户更加方便地处理表中的数据。
函数不但可以在 SELECT 查询语句中使用,同样可以在 INSERT、UPDATE、DELETE 等语句中使用。
这些函数丰富了 SQL 的语言功能,为 DMSQL 提供了更多的操作性。
DM 数据库函数可以接受零个或者多个输入参数,并返回一个输出结果。
DM 数据库除了内置丰富的数据库函数外,也支持自定义函数,可为开发者扩展更多便捷的功能。
数值函数
| 序号 | 函数名 | 功能简要说明 |
|---|---|---|
| 1 | ABS(n) | 求数值 n 的绝对值 |
| 2 | ACOS(n) | 求数值 n 的反余弦值 |
| 3 | ASIN(n) | 求数值 n 的反正弦值 |
| 4 | ATAN(n) | 求数值 n 的反正切值 |
| 5 | ATAN2(n1,n2) | 求数值 n1/n2 的反正切值 |
| 6 | CEIL(n) | 求大于或等于数值 n 的最小整数 |
| 7 | CEILING(n) | 求大于或等于数值 n 的最小整数,等价于 CEIL(n) |
| 8 | COS(n) | 求数值 n 的余弦值 |
| 9 | COSH(n) | 求数值 n 的双曲余弦值 |
| 10 | COT(n) | 求数值 n 的余切值 |
| 11 | DEGREES(n) | 求弧度 n 对应的角度值 |
| 12 | EXP(n) | 求数值 n 的自然指数 |
| 13 | FLOOR(n) | 求小于或等于数值 n 的最大整数 |
| 14 | GREATEST(n1,n2,n3) | 求 n1、n2 和 n3 三个数中最大的一个 |
| 15 | GREAT (n1,n2) | 求 n1、n2 两个数中最大的一个 |
| 16 | LEAST(n1,n2,n3) | 求 n1、n2 和 n3 三个数中最小的一个 |
| 17 | LN(n) | 求数值 n 的自然对数 |
| 18 | LOG(n1[,n2]) | 求数值 n2 以 n1 为底数的对数 |
| 19 | LOG10(n) | 求数值 n 以 10 为底的对数 |
| 20 | MOD(m,n) | 求数值 m 被数值 n 除的余数 |
| 21 | PI() | 得到常数 π |
| 22 | POWER(n1,n2)/POWER2(n1,n2) | 求数值 n2 以 n1 为基数的指数 |
| 23 | RADIANS(n) | 求角度 n 对应的弧度值 |
| 24 | RAND([n]) | 求一个 0 到 1 之间的随机浮点数 |
| 25 | ROUND(n[,m]) | 求四舍五入值函数 |
| 26 | SIGN(n) | 判断数值的数学符号 |
| 27 | SIN(n) | 求数值 n 的正弦值 |
| 28 | SINH(n) | 求数值 n 的双曲正弦值 |
| 29 | SQRT(n) | 求数值 n 的平方根 |
| 30 | TAN(n) | 求数值 n 的正切值 |
| 31 | TANH(n) | 求数值 n 的双曲正切值 |
| 32 | TO_NUMBER (char [,fmt]) | 将 CHAR、VARCHAR、VARCHAR2 等类型的字符串转换为 DECIMAL 类型的数值 |
| 33 | TRUNC(n[,m]) | 截取数值函数 |
| 34 | TRUNCATE(n[,m]) | 截取数值函数,等价于 TRUNC(n[,m]) |
| 35 | TO_CHAR(n [, fmt [,’nls’ ] ]) | 将数值类型的数据转换为 VARCHAR 类型输出 |
| 36 | BITAND(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;
字符串函数
| 序号 | 函数名 | 功能简要说明 |
|---|---|---|
| 1 | ASCII(char) | 返回字符对应的整数 |
| 2 | ASCIISTR(char) | 将字符串 char 中,非 ASCII 的字符转成 \XXXX (UTF-16) 格式,ASCII 字符保持不变 |
| 3 | BIT_LENGTH(char) | 求字符串的位长度 |
| 4 | CHAR(n) | 返回整数 n 对应的字符 |
| 5 | CHAR_LENGTH(char)/CHARACTER_LENGTH(char) | 求字符串的串长度 |
| 6 | CHR(n) | 返回整数 n 对应的字符,等价于 CHAR(n) |
| 7 | CONCAT(char1,char2,char3,…) | 顺序联结多个字符串成为一个字符串 |
| 8 | DIFFERENCE(char1,char2) | 比较两个字符串的 SOUNDEX 值之差异,返回两个 SOUNDEX 值串同一位置出现相同字符的个数。 |
| 9 | INITCAP(char) | 将字符串中单词的首字符转换成大写的字符 |
| 10 | INS(char1,begin,n,char2) | 删除在字符串 char1 中以 begin 参数所指位置开始的n 个字符,再把 char2 插入到 char1 串的 begin 所指位置 |
| 11 | INSERT(char1,n1,n2,char2)/INSSTR(char1,n1,n2,char2) | 将字符串 char1 从 n1 的位置开始删除 n2 个字符,并将 char2 插入到 char1 中 n1 的位置 |
| 12 | INSTR(char1,char2[,n,[m]]) | 从输入字符串 char1 的第 n 个字符开始查找字符串char2 的第 m 次出现的位置,以字符计算 |
| 13 | INSTRB(char1,char2[,n,[m]]) | 从 char1 的第 n 个字节开始查找字符串 char2 的第 m次出现的位置,以字节计算 |
| 14 | LCASE(char) | 将大写的字符串转换为小写的字符串 |
| 15 | LEFT(char,n) /LEFTSTR(char,n) | 返回字符串最左边的 n 个字符组成的字符串 |
| 16 | LEN(char) | 返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中不包含尾随空格 |
| 17 | LENGTH(char) | 返回给定字符串表达式的字符(而不是字节)个数(汉字为一个字符),其中包含尾随空格 |
| 18 | OCTET_LENGTH(char) | 返回输入字符串的字节数 |
| 19 | LOCATE(char1,char2[,n]) | 返回 char1 在 char2 中首次出现的位置 |
| 20 | LOWER(char) | 将大写的字符串转换为小写的字符串 |
| 21 | LPAD(char1,n,char2) | 在输入字符串的左边填充上 char2 指定的字符,将其拉伸至 n 个字节长度 |
| 22 | LTRIM(char1,char2) | 从输入字符串中删除所有的前导字符,这些前导字符由 |
| 23 | POSITION(char1,/ IN char2) | 求串 1 在串 2 中第一次出现的位置 |
| 24 | REPEAT(char,n) /REPEATSTR(char,n) | 返回将字符串重复 n 次形成的字符串 |
| 25 | REPLACE(STR, search[,replace] ) | 将输入字符串 STR 中所有出现的字符串 search 都替换成字符串 replace,其中 STR 为 char、clob 或 text 类型 |
| 26 | REPLICATE(char,times) | 把字符串 char 自己复制 times 份 |
| 27 | REVERSE(char) | 将字符串反序 |
| 28 | RIGHT / RIGHTSTR(char,n) | 返回字符串最右边 n 个字符组成的字符串 |
| 29 | RPAD(char1,n,char2) | 类似 LPAD 函数,只是向右拉伸该字符串使之达到 n 个字节长度 |
| 30 | RTRIM(char1,char2) | 从输入字符串的右端开始删除 char2 参数中的字符 |
| 31 | SOUNDEX(char) | 返回一个表示字符串发音的字符串 |
| 32 | SPACE(n) | 返回一个包含 n 个空格的字符串 |
| 33 | STRPOSDEC(char) | 把字符串 char 中最后一个字符的值减一 |
| 34 | STRPOSDEC(char,pos) | 把字符串 char 中指定位置 pos 上的字符值减一 |
| 35 | STRPOSINC(char) | 把字符串 char 中最后一个字符的值加一 |
| 36 | STRPOSINC(char,pos) | 把字符串 char 中指定位置 pos 上的字符值加一 |
| 37 | STUFF(char1,begin,n,char2) | 删除在字符串 char1 中以 begin 参数所指位置开始的 n 个字符,再把 char2 插入到 char1 串的 begin 所指位置 |
| 38 | SUBSTR(char,m,n)/ SUBSTRING(char FROM m [FORn]) | 返回 char 中从字符位置 m 开始的 n 个字符 |
| 39 | SUBSTRB(char,n,m) | SUBSTR 函数等价的单字节形式 |
| 40 | TO_CHAR(character) | 将 VARCHAR、CLOB、TEXT 类型的数据转化为 VARCHAR 类型输出 |
| 41 | TRANSLATE(char,from,to) | 将所有出现在搜索字符集中的字符转换成字符集中的相应字符 |
| 42 | TRIM([LEADING|TRAILING|BOTH] [exp] [] FROM char2]) | 删去字符串 char2 中由串 char1 指定的字符 |
| 43 | UCASE(char) | 将小写的字符串转换为大写的字符串 |
| 44 | UPPER(char) | 将小写的字符串转换为大写的字符串 |
| 45 | REGEXP | 根据符合 POSIX 标准的正则表达式进行字符串匹配 |
| 46 | OVERLAY(char1 PLACINGchar2 FROM int [FOR int]) | 字符串覆盖函数,用 char2 覆盖 char1 中指定的子串,返回修改后的 char1 |
| 47 | TEXT_EQUAL | 返回两个 LONGVARCHAR 类型的值的比较结果,相同返回 1,否则返回 0 |
| 48 | BLOB_EQUAL | 返回两个 LONGVARBINARY 类型的值的比较结果,相同返回 1,否则返回 0 |
| 49 | NLSSORT(str1[,nls_sort=str2]) | 返回对汉字排序的编码 |
| 50 | GREATEST(char1, char2,char3) | 求 char 1、char 2 和 char 3 中最大的字符串 |
| 51 | GREAT (char1, char2) | 求 char 1、char 2 中最大的字符串 |
| 52 | TO_SINGLE_BYTE (char) | 将多字节形式的字符(串)转换为对应的单字节形式 |
| 53 | TO_MULTI_BYTE (char) | 将单字节形式的字符(串)转换为对应的多字节形式 |
| 54 | EMPTY_CLOB () | 初始化 clob 字段 |
| 55 | EMPTY_BLOB () | 初始化 blob 字段 |
| 56 | UNISTR (char) | 将字符串 char 中,ascii 码(‗\XXXX‘4 个 16 进制字符格式)转成本地字符。对于其他字符保持不变。 |
| 57 | ISNULL(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
日期时间函数
| 序号 | 函数名 | 功能简要说明 |
|---|---|---|
| 1 | ADD_DAYS(date,n) | 返回日期加上 n 天后的新日期 |
| 2 | ADD_MONTHS(date,n) | 在输入日期上加上指定的几个月返回一个新日期 |
| 3 | ADD_WEEKS(date,n) | 返回日期加上 n 个星期后的新日期 |
| 4 | CURDATE() | 返回系统当前日期 |
| 5 | CURTIME(n) | 返回系统当前时间 |
| 6 | CURRENT_DATE() | 返回系统当前日期 |
| 7 | CURRENT_TIME(n) | 返回系统当前时间 |
| 8 | CURRENT_TIMESTAMP(n) | 返回系统当前带会话时区信息的时间戳 |
| 9 | DATEADD(datepart,n,date) | 向指定的日期加上一段时间 |
| 10 | DATEDIFF(datepart,date1,date2) | 返回跨两个指定日期的日期和时间边界数 |
| 11 | DATEPART(datepart,date) | 返回代表日期的指定部分的整数 |
| 12 | DAY(date) | 返回日期中的天数 |
| 13 | DAYNAME(date) | 返回日期的星期名称 |
| 14 | DAYOFMONTH(date) | 返回日期为所在月份中的第几天 |
| 15 | DAYOFWEEK(date) | 返回日期为所在星期中的第几天 |
| 16 | DAYOFYEAR(date) | 返回日期为所在年中的第几天 |
| 17 | DAYS_BETWEEN(date1,date2) | 返回两个日期之间的天数 |
| 18 | EXTRACT(时间字段 FROM date) | 抽取日期时间或时间间隔类型中某一个字段的值 |
| 19 | GETDATE(n) | 返回系统当前时间戳 |
| 20 | GREATEST(date1,date2,date3) | 求 date1、 date2 和 date3 中的最大日期 |
| 21 | GREAT (date1,date2) | 求 date1、 date2 中的最大日期 |
| 22 | HOUR(time) | 返回时间中的小时分量 |
| 23 | LAST_DAY(date) | 返回输入日期所在月份最后一天的日期 |
| 24 | LEAST(date1, date2, date3) | 求 date1、 date2 和 date3 中的最小日期 |
| 25 | MINUTE(time) | 返回时间中的分钟分量 |
| 26 | MONTH(date) | 返回日期中的月份分量 |
| 27 | MONTHNAME(date) | 返回日期中月分量的名称 |
| 28 | MONTHS_BETWEEN(date1,date2) | 返回两个日期之间的月份数 |
| 29 | NEXT_DAY(date1,char2) | 返回输入日期指定若干天后的日期 |
| 30 | NOW(n) | 返回系统当前时间戳 |
| 31 | QUARTER(date) | 返回日期在所处年中的季节数 |
| 32 | SECOND(time) | 返回时间中的秒分量 |
| 33 | ROUND (date1[, fmt]) | 把日期四舍五入到最接近格式元素指定的形式 |
| 34 | TIMESTAMPADD(datepart,n,timestamp) | 返回时间戳 timestamp 加上 n 个 datepart 指定的时间段的结果 |
| 35 | TIMESTAMPDIFF(datepart,timeStamp1,timestamp2) | 返回一个表明 timestamp2 与 timestamp1 之间的指定 datepart 类型时间间隔的整数 |
| 36 | SYSDATE() | 返回系统的当前日期 |
| 37 | TO_DATE(CHAR[,fmt[,’nls’]]) /TO_TIMESTAMP(CHAR[,fmt[,’nls’]]) /TO_TIMESTAMP_TZ(CHAR[,fmt]) | 字符串转换为日期时间数据类型 |
| 38 | FROM_TZ(timestamp,timezone|tz_name]) | 将时间戳类型 timestamp 和时区类型 timezone(或时区名称 tz_name )转化为 timestamp withtimezone 类型 |
| 39 | TRUNC(date[,fmt]) | 把日期截断到最接近格式元素指定的形式 |
| 40 | WEEK(date) | 返回日期为所在年中的第几周 |
| 41 | WEEKDAY(date) | 返回当前日期的星期值 |
| 42 | WEEKS_BETWEEN(date1,date2) | 返回两个日期之间相差周数 |
| 43 | YEAR(date) | 返回日期的年分量 |
| 44 | YEARS_BETWEEN(date1,date2) | 返回两个日期之间相差年数 |
| 45 | LOCALTIME(n) | 返回系统当前时间 |
| 46 | LOCALTIMESTAMP(n) | 返回系统当前时间戳 |
| 47 | OVERLAPS | 返回两个时间段是否存在重叠 |
| 48 | TO_CHAR(date[,fmt[,nls]]) | 将日期数据类型 DATE 转换为一个在日期语法 fmt 中指定语法的 VARCHAR 类型字符串。 |
| 49 | SYSTIMESTAMP(n) | 返回系统当前带数据库时区信息的时间戳 |
| 50 | NUMTODSINTERVAL(dec,interval_unit) | 转换一个指定的 DEC 类型到 INTERVAL DAY TOSECOND |
| 51 | NUMTOYMINTERVAL(dec,interval_unit) | 转换一个指定的 DEC 类型值到 INTERVAL YEAR TOMONTH |
| 52 | WEEK(date, mode) | 根据指定的 mode 计算日期为年中的第几周 |
| 53 | UNIX_TIMESTAMP (datetime) | 返回自标准时区的’1970-01-01 00:00:00 +0:00’的到本地会话时区的指定时间的秒数差 |
| 54 | FROM_UNIXTIME(unixtime) | 返回将自’1970-01-01 00:00:00’的秒数差转成本地会话时区的时间戳类型 |
| 55 | FROM_UNIXTIME(unixtime,fmt) | 将自’1970-01-01 00:00:00’的秒数差转成本地会话时区的指定 fmt 格式的时间串 |
| 56 | SESSIONTIMEZONE | 返回当前会话的时区 |
| 57 | DATE_FORMAT(d, format) | 以不同的格式显示日期/时间数据 |
| 58 | TIME_TO_SEC(d) | 将时间换算成秒 |
| 59 | SEC_TO_TIME(sec) | 将秒换算成时间 |
| 60 | TO_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
空值判断函数
| 序号 | 函数名 | 功能简要说明 |
|---|---|---|
| 1 | COALESCE(n1,n2,…nx) | 返回第一个非空的值 |
| 2 | IFNULL(n1,n2) | 当 n1 为非空时,返回 n1;若 n1 为空,则返回 n2 |
| 3 | ISNULL(n1,n2) | 当 n1 为非空时,返回 n1;若 n1 为空,则返回 n2 |
| 4 | NULLIF(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
杂类函数
| 序号 | 函数名 | 功能简要说明 |
|---|---|---|
| 1 | DECODE(exp, search1,result1, … searchn, resultn[,default]) | 查表译码 |
| 2 | ISDATE(exp) | 判断表达式是否为有效的日期 |
| 3 | ISNUMERIC(exp) | 判断表达式是否为有效的数值 |
| 4 | DM_HASH (exp) | 根据给定表达式生成 HASH 值 |
| 5 | LNNVL(condition) | 根据表达式计算结果返回布尔值 |
| 6 | LENGTHB(value) | 返回 value 的字节数 |
| 7 | FIELD(value, e1, e2, e3,e4…en) | 返回 value 在列表 e1,e2,e3,e4…en 中的位置序号,不在输入列表时则返回 0 |



1万+

被折叠的 条评论
为什么被折叠?



