sql常用语句

一、字符串相关

1.根据指定字符替换

select replace(column_name, '旧字符', '新字符') from table_name;

2.截取指定下标开始的指定长度字符串

select substring(column_name ,start_index,字符长度) from table_name;

3.获取指定字符的下标

select charindex('字符',column_name) from table_name;

4.反转指定字段数据

select reverse(column_name) from table_name;

5.获取指定前几个字符

select left(column_name,字符长度) from table_name;

6.获取指定后几个字符

select right(column_name,字符长度) from table_name;

二、时间相关

1.将时间转为字符串(24小时制)

select to_char(column_name,'yyyy-MM-dd HH24:mi:ss') from table_name; 

2.将字符串格式化为时间

select to_date('2024-02-29 14:11:24','yyyy-MM-dd HH24:mi:ss') from dual;

三、数据处理相关

1.查询根据指定字段去重(去除重复数据,保留id最大的重复数据)

select * from 表名 where id in (select id from
(select su.*, row_number() over (partition by 去重字段名 order by su.id desc ) rn
from 表名 su where 其他条件 ) where rn = 1 )

2.查询重复多余的数据

select * from 表名 where id in (select id from
(select su.*, row_number() over (partition by 去重字段名 order by su.id desc ) rn
from 表名 su where 其他条件 ) where rn != 1 )

3.distinct过滤重复数据,限制较大,要过滤和获取较少的字段推荐使用。

select distinct 字段名1,字段名2 from 表名 where 其他条件;

4.sql查询,将某个字段值设置为固定的,适用于固定值的匹配,例如学生表性别匹配

select name,
case sex
when 1 then '男'
when 0 then '女'
else
'未定义'
end as sex

from student

数据源:

 查询结果:

 5.行转列拼接(仅适用oracle数据库)

  (1)将多行数据,根据某一列(或两列)分组,另一列按照特定规则拼接,例如:将相同部门的人员转为一条数据,并用“,”拼接起来  

        数据如下:

 sql和结果:

select organname,listagg(name, ', ') within group (order by name) as username from userinfo group by organname

(2)将多字段行转列拼接

新增性别字段:

将姓名和性别拼接到一起,再进行行转列:

 select organname,listagg(name || '-' || sex, ', ') within group (order by name) as username from userinfo group by organname

 (3)将多列的值拼接到一个字段并且字符很长时,可以使用xmlagg生成clob字段

select organname, RTRIM(XMLCAST(XMLAGG(XMLELEMENT(e, name || ' - $' || sex) ORDER BY name) AS CLOB), ', ') AS info
FROM userinfo GROUP BY organname;

  

 

 

四、语法差异

1.truncate和delete

  • truncate 只能删除table,delete可以删除table、view等
  • 用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后的使用,另外它是“假相”的删除,相当于windows中用delete删除数据是把数据放到回收站中,还可以恢复,当然如果这个时候重新启动系统(OS或者RDBMS),它也就不能恢复了!
    用truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被立即释放,相当于windows中用shift+delete删除数据,不进回收站,不能够恢复!
  • truncate 后面不能带where条件,delete可以带where条件。

 

posted @ 2024-02-28 17:21  远山伴痴人  阅读(119)  评论(0编辑  收藏  举报