笔记
grace_cxj
这个作者很懒,什么都没留下…
展开
-
Oracle删除Date日期后的时分秒
问题想将1997/1/8 10:30:27变为1997/1/8。不想使用to_char再to_date这样两次转换。解决方案select trunc(birthday) from tableName;trunc一下即可。原创 2021-04-15 17:29:42 · 6536 阅读 · 2 评论 -
Oracle自动生成ID,自动编号,自增补零填充
问题在pl/sql中,需将某个查询结果插入到一个新表tableNameA中时,如何通过sql自动生成ID列,且形如:ID0001,ID0002,ID0003……。解决方案insert into tableNameA(id, …) (select 'ID'||lpad(rownum,4,0), … from tableName where …)...原创 2021-04-15 17:22:05 · 3405 阅读 · 0 评论 -
Oracle union all和union(直接合并与去重合并)
A中有:苹果????、水蜜桃????B中有:苹果????、菠萝????union all直接合并(select * from A) union all (select * from B)得到:苹果????、水蜜桃????、苹果????、菠萝????union去重合并(select * from A) union (select * from B)得到:苹果????、水蜜桃????、菠萝????...原创 2021-04-13 16:58:33 · 670 阅读 · 0 评论 -
Oracle cross join交叉相乘生成有m*n条记录的表(排列组合、穷举、生成课程成绩)
需求A表为学生表,存了所有学生的编号和姓名信息(如张三、李四),B表为课程表(如语文、数学、英语),现在需要生成一张成绩表,即每位学生的每门课程为一条记录。如果有2名学生,3门课程,这张成绩表里需要有6条记录,如何生成这样一张表呢?解决方法使用 类似笛卡尔乘积的连接方法cross join。(select 姓名 from A) cross join (select 课程名 from B)...原创 2021-04-13 16:46:46 · 284 阅读 · 0 评论 -
Oracle with as临时表 去除重复代码(解决查询结果需要复用的问题)
需求在一个大任务中,有个中间查询结果(这个结果需要连表查询,而且条件多,sql语句长),需要被多次使用,不想将这大段的sql重复写5、6遍,可读性也很差。解决方法用with tmp_sql as (…需要重复使用的sql…)的方法,将这句话放在大查询的前面,相当于声明一个临时表叫tmp_sql,之后要用这个查询结果时,就直接select * from tmp_sql 就行,代码易读性会好很多。...原创 2021-04-13 16:30:41 · 469 阅读 · 0 评论 -
Oracle分组后再组内排序编号
oracle分组后再组内编号需求一张表中,每位员工有多条记录,需要将每位员工的记录按时间顺序排列并独立编号(每个人都从1开始重新编号)解决方法select row_number() over(partition by user_id order by create_date asc) rn, t.user_id, t.create_date from tableA t;这样rn列就是每个人从1开始编好号的一列。...原创 2021-04-13 15:44:14 · 1874 阅读 · 0 评论