常用SQL收藏
原文:常用SQL收藏
MSSQL Split表字段
- --拆分字符串之后匹配结果集合
- CREATE FUNCTION [dbo].[fnSplit](
- @sInputList VARCHAR(8000) -- List of delimited items
- , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items
- ) RETURNS @List TABLE (item VARCHAR(8000))
- BEGIN
- DECLARE @sItem VARCHAR(8000)
- WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
- BEGIN
- SELECT
- @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
- @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))
- IF LEN(@sItem) > 0
- INSERT INTO @List SELECT @sItem
- END
- IF LEN(@sInputList) > 0
- INSERT INTO @List SELECT @sInputList -- Put the last item in
- RETURN
- END
- ----------------------使用方法
- if object_id('tempdb..#Tmp') is not null
- drop table #Tmp
- create table #Tmp --创建临时表#Tmp
- (
- ID VARCHAR(100)
- );
- DECLARE @iid VARCHAR(100)
- declare @name varchar(500)
- declare cursor1 cursor for --定义游标cursor1
- select iid,props from Iteminfos --使用游标的对象
- open cursor1 --打开游标
- fetch next from cursor1 into @iid,@name --将游标向下移1行,获取的数据放入之前定义的变量@iid,@name中
- while @@fetch_status=0 --判断是否成功获取数据
- begin
- IF((select COUNT(*) FROM fnSplit(@name, ';') WHERE item = '20000:20090')>0)
- INSERT INTO #Tmp (ID) VALUES (@iid)
- fetch next from cursor1 into @iid,@name --将游标向下移1行
- end
- close cursor1 --关闭游标
- deallocate cursor1
- SELECT * FROM dbo.Iteminfos WHERE iid IN( SELECT ID FROM #Tmp)
查询节点的函数
- create table tb(id varchar(3) , pid varchar(3) , name varchar(10))
- insert into tb values('001' , null , '广东省')
- insert into tb values('002' , '001' , '广州市')
- insert into tb values('003' , '001' , '深圳市')
- insert into tb values('004' , '002' , '天河区')
- insert into tb values('005' , '003' , '罗湖区')
- insert into tb values('006' , '003' , '福田区')
- insert into tb values('007' , '003' , '宝安区')
- insert into tb values('008' , '007' , '西乡镇')
- insert into tb values('009' , '007' , '龙华镇')
- insert into tb values('010' , '007' , '松岗镇')
- go
- -------------创建方法
- create function f_cid(@ID varchar(3)) returns @t_level table(id varchar(3) , level int)
- as
- begin
- declare @level int
- set @level = 1
- insert into @t_level select @id , @level
- while @@ROWCOUNT > 0
- begin
- set @level = @level + 1
- insert into @t_level select a.id , @level
- from tb a , @t_Level b
- where a.pid = b.id and b.level = @level - 1
- end
- return
- END
- GO
- --------------使用方法
- select a.* from tb a , f_cid('001') b where a.id = b.id order by a.id
- --------------调用函数查询(广州市)及其所有子节点
- select a.* from tb a , f_cid('002') b where a.id = b.id order by a.id
Exists,Datediff,Newid,
- ---两张关联表,删除主表中已经在副表中没有的信息
- delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
- ---日程安排提前五分钟提醒
- SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
- ---随机取出10条数据
- select top 10 * from tablename order by newid()
- -- 类似有 month day year
- select * from table1 where convert(varchar,date,120) like '2006-04-01%'
- --datediff
- select * from table1 where datediff(day,time,'2006-4-1')=0
删除重复值
- --1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
- select * from people
- where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
- --2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
- delete from people
- where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
- and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
- --3、查找表中多余的重复记录(多个字段)
- select * from vitae a
- where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
- --4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
- delete from vitae a
- where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
- and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
- --5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
- select * from vitae a
- where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
- and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
- --经典尝试 删除重复值
- declare @table table (id int,name nvarchar(10))
- insert into @table select 1,'aa'
- union all select 1,'aa'
- union all select 2,'bb'
- union all select 3,'bb'
- union all select 4,'cc'
- union all select 1,'aa'
- union all select 4,'cc'
- delete a
- from (
- select id,name,rn = row_number() over (partition by id,name order by id) from @table
- ) a where rn > 1
- select * from @table
- id name
- ----------- ----------
- 1 aa
- 2 bb
- 3 bb
- 4 cc
- (4 row(s) affected)
常用日期转换参数
- select CONVERT(varchar, getdate(), 120 )
- --结果
- 2004-09-12 11:06:08
- select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
- --结果
- 20040912110608
- select CONVERT(varchar(12) , getdate(), 111 )
- --结果
- 2004/09/12
- select CONVERT(varchar(12) , getdate(), 112 )
- --结果
- 20040912
- select CONVERT(varchar(12) , getdate(), 102 )
- --结果
- 2004.09.12
行转列
- create table tb(姓名varchar(10) , 课程varchar(10) , 分数int)
- insert into tb values('张三' , '语文' , 74)
- insert into tb values('张三' , '数学' , 83)
- insert into tb values('张三' , '物理' , 93)
- insert into tb values('李四' , '语文' , 74)
- insert into tb values('李四' , '数学' , 84)
- insert into tb values('李四' , '物理' , 94)
- go
- select 姓名 as 姓名,
- max(case 课程 when '语文' then 分数 else 0 end) 语文,
- max(case 课程 when '数学' then 分数 else 0 end) 数学,
- max(case 课程 when '物理' then 分数 else 0 end) 物理,
- cast(avg(分数*1.0) as decimal(18,2)) 平均分,
- sum(分数) 总分
- from tb
- group by 姓名
- --SQL SERVER 2000 动态SQL。
- declare @sql varchar(8000)
- set @sql = 'select 姓名 '
- select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
- from (select distinct 课程 from tb) as a
- set @sql = @sql + ' , cast(avg(分数*1.0) as decimal(18,2)) 平均分, sum(分数) 总分 from tb group by 姓名'
- exec(@sql)
- --姓名 数学 物理 语文 平均分 总分
- --李四 84 94 74 84.00 252
- --张三 83 93 74 83.33 250
通过子节点ID得到所有父节点
- ALTER function [dbo].[f_cid](@id int)
- returns @t table(id int,[name] varchar(30),parentid int,lev int)
- as
- begin
- declare @lev int
- set @lev=1
- insert into @t SELECT cid,name,parent_cid,@lev from TB_ItemCats where cid=@id
- while(@@rowcount>0)
- begin
- set @lev=@lev+1
- insert into @t select a.cid,a.name,a.parent_cid,@lev from TB_ItemCats a,@t b
- where a.cid=b.parentid and b.lev=@lev-1 AND a.cid NOT IN (select b.id from @t)
- end
- return
- END
123
3232
123
3232
123
3232
123
3232
123
3232
123
3232
123
3232
123
3232
123
3232
123
3232
123
3232
常用SQL收藏的更多相关文章
- Mysql 常用 SQL 语句集锦
Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...
- 常用SQL[ORACLE]
1.常用系统函数 2.常用sql语句 3.一些定义和关键字 4.需要注意点 1.常用系统函数 ↑ --decode decode(column,if_value,value,elseif_ ...
- Oracle常用SQL查询(2)
三.查看数据库的SQL 1 .查看表空间的名称及大小 select t.tablespace_name, round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...
- Oracle常用SQL查询
一.ORACLE的启动和关闭 1.在单机环境下要想启动或关闭oracle系统必须首先切换到oracle用户,如下: su - oracle a.启动Oracle系统 oracle>svrmgrl ...
- Mysql 常用 SQL 语句集锦 转载(https://gold.xitu.io/post/584e7b298d6d81005456eb53)
Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...
- 50个常用SQL语句
50个常用SQL语句 Student(S#,Sname,Sage,Ssex) 学生表 S#学号,主键 Course(C#,Cname,T#) 课程表 C#课程号,主键 SC(S#, ...
- 测试常用SQL注入语句大全
转载自Cracer,标题:<渗透常用SQL注入语句大全>,链接http://www.xxxx.com/?p=2226 1.判断有无注入点 整形参数判断 1.直接加' 2.and 1=1 3 ...
- oracle sqlplus及常用sql语句
常用sql语句 有需求才有动力 http://blog.csdn.net/yitian20000/article/details/6256716 常用sql语句 创建表空间:create tables ...
随机推荐
- [ecmagent][redis学习][1初识redis] python操作redis
#1 连接redis # 连接redis -- import redis -- 使用端口连接redis conn = redis.Redis(host=) -- 使用套接字连接 r = redis.R ...
- KindleEditor insertfile初始化多个
KindEditor.ready(function (K) { var editor = K.editor({ allowFileManager: true }); K('#insertfile'). ...
- 基于MAC OS 操作系统安装、配置hadoop
在Mac上安装Hadoop 对我这个之前从未接触过*nix的用户来说,使用命令行来做一系列的事情还是废了一番功夫.特写这个记录,以做备份. 获取Java 我的Mac运行的操作系统是OS X 10.7 ...
- Rust安装配置
Rust安装配置 话说前面: 如果你 之前安装过老版本的 rust 请先卸载 我说的是以 msi 文件安装的那种, 请进控制面板–> 程序中进行卸载 首先 下载官网 的 rustup-init. ...
- [洛谷P4630][APIO2018] Duathlon 铁人两项
题目大意:给一张无向图,求三元组$(u,v,w)$满足$u->v->w$为简单路径,求个数 题解:圆方树,缩点后$DP$,因为同一个点双中的点一定地位相同 卡点:1.$father$数组开 ...
- [SDOI2015][bzoj4518] 征途 [斜率优化dp]
题面 传送门 思路 把$vm^2$展开化一下式子,可以得到这样的等价公式: $vm^2=m\sum_{i=1}^m a_i^2-\sum_{i=1}^m a_i$ 那么我们要最小化的就是$\sum_{ ...
- div样式
DIV样式汇总 一.常用属性: 1.Height:设置DIV的高度. 2.Width:设置DIV的宽度. 例: <div style="width:200px;height:200px ...
- 异或值 xor
题目描述 给出一个 N 个点的带权无向图,要求从 1 号点到 N 号点的一条路径,使得路径上的边 权异或值最大. 输入格式 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M ...
- 叶落归根(hometown)
叶落归根(hometown) 题目描述 叶落归根——树叶从树根生发出来,凋落后最终还是回到树根.比喻事物总有一定的归宿.接下来是题目. 给定一个n个点的有向图G(点的编号为1~n),一开始落叶(仅作为 ...
- bzoj [Noi2008] 1061 志愿者招募 单纯形
[Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 5437 Solved: 3267[Submit][Status][Di ...