字符串函数
-- 返回字符a的ASCII码SELECT ASCII('a') FROM dual; -- 97-- 连接字符串hello和worldSELECT CONCAT('Hello','world') FROM dual; -- Helloworld-- 从Hello中查找orSELECT INSTR('Hello world','or') FROM dual; -- 8-- 返回Hello的长度SELECT LENGTH('Hello') FROM dual; -- 5-- Hello转换成小写SELECT LOWER('Hello') FROM dual; -- hello-- hello转换成大写SELECT UPPER('hello') FROM dual; -- HELLO-- 把=Hello=的左边截去=字符串,缺省截去空格SELECT LTRIM('=Hello=','=') FROM dual; -- Hello=-- 把=Hello=的右边截去=字符串,缺省截去空格SELECT RTRIM('=Hello=','=') FROM dual; -- =Hello-- 把=Hello=的两边截去=字符串,缺省截去空格SELECT TRIM('='FROM'=Hello=') FROM dual; -- Hello-- 在ABCDE中查找CD,并替换成AAASELECT REPLACE('ABCDE','CD','AAA')FROM dual; -- ABAAAE-- 返回ABCDE的字符串,从第2个位置开始,截取3个字符SELECT SUBSTR('ABCDE',2,3) FROM dual; -- BCD
数字函数
-- -3的绝对值SELECT ABS(-3) FROM dual; -- 3-- X的反余弦SELECT ACOS(1) FROM dual; -- 0-- 余弦SELECT COS(1) FROM dual; -- 0.54030230586814-- 大于或等于5.4的最小值(向上取整)SELECT CEIL(5.4) FROM dual; -- 6-- 小于或等于5.8的最大值(向下取整)SELECT FLOOR(5.8) FROM dual; -- 5-- 2为底4的对数SELECT LOG(2, 4) FROM dual; -- 2-- 8除以3的余数SELECT MOD(8, 3) FROM dual; -- 2-- 2的3次幂SELECT POWER(2,3) FROM dual; -- 8-- 3.456在第2位,四舍五入SELECT ROUND(3.456, 2) FROM dual; -- 3.46-- 4的平方根SELECT SQRT(4) FROM dual; -- 2-- 3.456在第2位截断,不四舍五入SELECT TRUNC(3.456,2) FROM dual; -- 3.45
日期函数
-- ADD_MONTHS(d,n),在某一个日期 d 上,加上指定的月数 n,返回计算后的新日期。d 表示日期,n 表示要加的月数SELECT SYSDATE 今日, add_months(SYSDATE,5) 五个月后 FROM dual;-- LAST_DAY(d),返回指定日期当月的最后一天SELECT SYSDATE 今日, last_day(SYSDATE) 本月最后一天 FROM dual;-- ROUND(d[,fmt]),返回一个以 fmt 为格式的四舍五入日期值, d 是日期, fmt 是日期格式代号。-- 默认为 DDD,即月中的某一天。最靠近的天,前半天舍去,后半天作为第二天。-- fmt 为“YEAR”则舍入到某年的 1 月 1 日,即前半年舍去,后半年作为下一年。-- fmt 为“MONTH”则舍入到某月的 1 日,即前月舍去,后半月作为下一月。-- fmt 为“DAY”则舍入到最近的周的周日,即上半周舍去,下半周作为下一周周日。SELECT SYSDATE 今日,ROUND(SYSDATE) 最近一天,ROUND(SYSDATE,'day') 最近周日,ROUND(SYSDATE,'month') 最近一月,ROUND(SYSDATE,'year') 最近一年FROM dual;-- 注意:TRUNC 与 ROUND 非常相似,只是不对日期四舍舍入,直接截取到对应格式的第一天-- EXTRACT(fmt FROM d),提取日期中的特定部分。-- fmt 为:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND-- 其中 YEAR、MONTH、DAY可以为 DATE 类型匹配,也可以与 TIMESTAMP 类型匹配;但是 HOUR、MINUTE、SECOND 必须与 TIMESTAMP 类型匹配。-- HOUR 匹配的结果中没有加上时区,因此在中国运行的结果小 8 小时SELECT SYSDATE 今日,EXTRACT(YEAR FROM SYSDATE) 年,EXTRACT(MONTH FROM SYSDATE) 月,EXTRACT(DAY FROM SYSDATE) 日,EXTRACT(HOUR FROM SYSTIMESTAMP) 时,EXTRACT(MINUTE FROM SYSTIMESTAMP) 分,EXTRACT(SECOND FROM SYSTIMESTAMP) 秒FROM dual;
转换函数
-- TO_CHAR(d|n[,fmt]) 把日期和数字转换为制定格式的字符串-- fmt是格式化字符串SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS') 今日今时 FROM dual;-- TO_DATE(X,[,fmt]) 把一个字符串以fmt格式转换成一个日期类型-- TO_NUMBER(X,[,fmt]) 把一个字符串以fmt格式转换为一个数字SELECT TO_NUMBER('-$12,345.67','$99,999.99') 格式化 FROM dual;
单行函数
-- NVL(X,VALUE) 如果X为空,返回value,否则返回X-- 对工资是2000元以下的员工,如果没发奖金,每人奖金100元SELECT ENAME 员工, NVL(COMM,100) 奖金 FROM EMP WHERE SAL<2000;-- NVL2(x,value1,value2) 如果x非空,返回value1,否则返回value2-- 对EMP表中工资为2000元以下的员工,如果没有奖金,则奖金为200元,如果有奖金,则在原来的奖金基础上加100元SELECT ENAME, NVL2(COMM,comm+100,200) 奖金 FROM EMP WHERE SAL<2000;
文章转载自全栈精英,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




