sql常用语句

远山伴痴人發表於2024-02-28

一、字符串相关

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 其他条件;

四、语法差异

1.truncate和delete

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