继续数据库操作:
(1)列转行
原始数据库:
SELECT * FROM (
SELECT c.id,'语文' 课程,yw 成绩 FROM cjb c
UNION ALL
SELECT c.id,'数学' 课程,sx FROM cjb c);
转化后的数据:
(2)行转列
--将(1)中转化后的表建立视图,名称:v_myview
CREATE VIEW v_myview AS
SELECT * FROM
(SELECT c.id,'语文' 课程,yw 成绩 FROM cjb c
UNION ALL
SELECT c.id,'数学' 课程,sx FROM cjb c);
--方法一
SELECT v.ID,MAX(CASE WHEN v.课程 = '语文' THEN v.成绩 ELSE 0 END) 语文,
MAX(CASE WHEN v.课程 = '数学' THEN v.成绩 ELSE 0 END) 数学 FROM v_myview v GROUP BY v.ID;
--方法二
SELECT v.ID,MAX(DECODE(v.课程,'语文',v.成绩,0)) 语文,
MAX(DECODE(v.课程,'数学',v.成绩,0)) 数学 FROM v_myview v GROUP BY v.ID;
数据库常用函数
(1) 字符串大小写转换
select lower('Hello'),upper('World') from dual;
(2) 获取字符串长度
--会计算空格,中文和字母长度一样
SELECT LENGTH('hello world'),LENGTH('你好,世界') FROM dual;
(3)截取字符串,从1开始数
SELECT SUBSTR('hello world',3,5) FROM dual;
(4)获取字符串位置
--从第一个位置开始找o出现的位置
SELECT INSTR('helloworld', 'o', 1) FROM dual;
(5)替换文本
--将'o'替换为'我'
SELECT REPLACE('helloworld','o','我') FROM dual;
(6)四舍五入
--留两位小数
SELECT ROUND(196.2561,2) FROM dual;
(7)截取数字或日期且不改变数据类型
--第二个参数可以不填,默认取整
SELECT TRUNC(1568.65,2) FROM dual;
(8)向上,下取整
--ceil向上取整 floor向下取整
SELECT CEIL(65.1),FLOOR(65.9) FROM dual;
(9)取余数,取幂,绝对值
SELECT MOD(18,5),POWER(2,4),ABS(200 - 500) FROM dual;
(10)获取当前日期
SELECT SYSDATE,SYSTIMESTAMP FROM dual;
(11)添加月份
--加12个月
SELECT add_months(SYSDATE,12) FROM dual;
(12)获取月的最后一天的日期
--获取当前月的最后一天
SELECT last_day(SYSDATE) FROM dual;