文章目录
单行函数
- 操作数据对象
- 接受参数返回一个对象
- 只对一行进行变换
- 每行返回一个结果
- 可以嵌套
- 参数可以是一列或者一值
数值函数
函数 | 用法 |
---|---|
ABS(X) | 返回x的绝对值 |
SIGN(X) | 取符号,正数1,负数-1,0 |
PI() | 返回圆周率的值 |
CEIL(X),CEILING(X) | 向上取整 |
FLOOR(X) | 向下取整 |
LEAST(e1,e2,3…) | 最小值 |
GREATEST(e1,e2,e3…) | 最大值 |
RAND() | 随机0-1的数 |
RAND(X) | 返回0-1的随机值,其中x的值用作种子值,相同的x值会产生相同的随机数 |
ROUND(X) | 四舍五入 |
TRUNCATE(X,Y) | 返回数字x截断为y位小数的结果 |
SQRT(X) | 返回x的平方根,x为负数,返回NULL |
MOD(x,y) | 返回x,y的余数 |
#取随机数
SELECT RAND(),RAND(10),RAND(10)
FROM DUAL;
#RAND(10),RAND(10)结果相同,伪随机数
#四舍五入,截断操作
SELECT ROUND(123.556),ROUND(123.456,1) , #保留1位小数
ROUND(123.456.-1) ,#结果120
ROUND(153.456.-2) #结果:200
FROM DUAL;
SELECT TRUNCATE(123.456,0),TRUNCATE(129.456,-1)#结果120
FROM DUAL;
#单行函数可以嵌套
SELECT TRUNCATE(ROUND(123.456,2),0)#结果:123
FROM DUAL;
三角函数
角度与弧度的互换
函数 | 用法 |
---|---|
RADIANS(X) | 将角度转换为弧度,其中,x为角度值 |
DEGREES(X) | 将弧度转换为角度,其中,x为弧度值 |
SELECT RADIANS(30),RADIANS(45),RADIANS(60),
DEGRES(2*PI()),DEGRES(RADIANS(60))
FROM DUAL;
三角函数
函数 | 用法 |
---|---|
SIN(X) | 返回正弦值 ,x为弧度值 |
COS(X) | 返回余弦值 ,x为弧度值 |
ASIN(X) | 返回反正弦值 ,如果x的值不在-1~1,返回NULL |
ACOS(X) | 返回反余弦值 ,如果x的值不在-1~1,返回NULL |
TAN(X) | 返回正切值 ,x为弧度值 |
ATAN(X) | 返回反正切值即返回正切值为x的值 |
ATAN2(m,n) | 返回两个参数的正切值 |
COT(X) | 返回余切值 ,x为弧度值 |
SELECT SIN(RADIANS(30)),DEGREES(ASIN(1)),TAN(RADIANS(45)),
DEGREES(ATAN(1))
FROM DUAL;
指数和对数
SELECT POW(2,5),EXP(2),POWER(2,4)
FROM DUAL;
SELECT LN(EXP(2)),LOG(EXP(2)),LOG10(10),LOG2(4)
FROM DUAL;
进制间的转换
函数 | 用法 |
---|---|
BIN(X) | 返回x的二进制 |
HEX(X) | 返回x的十六进制 |
OCT(X) | 返回x的八进制 |
CONV(X,f1,f2) | 返回f1进制数变成f2的进制数 |
SELECT BIN(10),HEX(10),OCT(10),CONV(10,10,8) #返回12
FROM DUAL;
字符串函数
函数 | 用法 |
---|---|
ASCII(S) | 返回字符串的第一个字符的ASCII值 |
CHAR_LEIGHT(S) | 返回字符串s的字符数,作用与CHARACTER_LENGTH(s)相同 |
LENGTH(S) | 返回字符串的长度 |
CONCAT(s1,s2,s3…sn) | 连接s1,s2…sn为一个字符串 |
CONCAT_WS(x,s1,s2…sn) | 用CONCAT(s1,s2…)函数,但是每个字符之间要加上x |
INSRT(str,idx,len,rplacestr) | 将字符串str从第idx位置开始,len字符长的子串替换为字符串replacetsr |
REPLACEI(str,a,b) | 用字符串b替换字符串str出现的字符串a |
UPPER(S)或 UCASE(S) | 将字符串的所有字母转换成大写字母 |
LOWER(S)或LCASE(S) | 将字符串的所有字母转换成小写字母 |
LEFT(str,n) | 返回最左边的n个字符 |
RIGHT(str,n) | 返回最右边的n个字符 |
LPAD(str,len,pad) | 用字符串pad对str最左边进行填充,直到str的长度为len个字符 |
RPAD(str,len,pnd) | 用字符串pnd对str最右边进行填充,直到str的长度为len个字符 |
LTRIM(s) | 去掉字符串s左侧的空格 |
RTRIM(s) | 去掉字符串s左侧的空格 |
TRIM(s1 FROMs) | 去掉字符串s开始与结尾的s1 |
TRIM(TRAILING s1 FROM s) | 去掉字符串结尾处的s1 |
REPEAT(str,n) | 返回字符串str重复n次的结果 |
SPACE(n) | 返回n个空格 |
STRCMP(S1,S2) | 比较两个字符串的ASCII码值 |
SUBSTR(S,INDEX,LEN) | 返回从字符串s的indx位置第len个字符 |
LOCATE(substr,str) | 返回字符串substr在字符串str’首次出现的位置,未找到,返回0 |
ELT(m,s1,s2,…,sn) | 返回指定位置的字符串,如果n=1,返回s1… |
FIELD(s,s1,s2,…,sn) | 返回字符串s在字符串列表中第一次出现的位置 |
FIND_IN_SET(s1,s2) | 返回字符串s1在字符串s2中出现的位置 |
SELECT ASCII('Abcdfsf'),CHAR_LENGTH('hello'),CHAR_LENGTH('我们')
LENGTH('hello'),LENGTH('我们')
FROM DUAL;
SELECT CONCAT(last_name,' workd for ',last_name)
FROM employees emp JOIN employees mgr
WHERE emp.'manger_id'= mgr.'employee_id';
SELECT CONCAT('','hello','world''beijing')
FROM DUAL;
#字符串的索引是从1开始的!
SELECT INSERT('hello',2,3,'aaaaa') ,REPLACE('hello','ll','mmm')
FROM DUAL; #结果:haaaaallo 结果:hemmmo
#LPAD:实现右对齐效果
#RPAD:实现左对齐效果
SELECT employee_id,last_name,LPAD(salary,10,'')
FROM employees;
SELECT REPEAT('hello',4),LENGTH(SPACE(5)),STRCMP('abc','abe')
FROM DUAL;
#结果:hellohellohellohello 5 -1
SELECT SUBSTR('hello',2,2),LOCATE('lll','hello')
FROM DUAL;
#结果:el 0
SELECT ELT(2,'a','b','c','d')
FROM DUAL;
#结果:b
SELECT FIELD('mm','gg','jj','mm','dd','mm')
FROM DUAL;
#结果:3
SELECT FIND_IN_SET('mm','gg,jj,mm,dd,mm')
FROM DUAL;
#结果:3