原文:常用SQL收藏

MSSQL Split表字段

  1. --拆分字符串之后匹配结果集合
  2. CREATE FUNCTION [dbo].[fnSplit](
  3. @sInputList VARCHAR(8000) -- List of delimited items
  4. , @sDelimiter VARCHAR(8000) = ',' -- delimiter that separates items
  5. ) RETURNS @List TABLE (item VARCHAR(8000))
  6.  
  7. BEGIN
  8. DECLARE @sItem VARCHAR(8000)
  9. WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
  10. BEGIN
  11. SELECT
  12. @sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
  13. @sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))
  14.  
  15. IF LEN(@sItem) > 0
  16. INSERT INTO @List SELECT @sItem
  17. END
  18.  
  19. IF LEN(@sInputList) > 0
  20. INSERT INTO @List SELECT @sInputList -- Put the last item in
  21. RETURN
  22. END
  23.  
  24. ----------------------使用方法
  25. if object_id('tempdb..#Tmp') is not null
  26. drop table #Tmp
  27. create table #Tmp --创建临时表#Tmp
  28. (
  29. ID VARCHAR(100)
  30. );
  31.  
  32. DECLARE @iid VARCHAR(100)
  33. declare @name varchar(500)
  34. declare cursor1 cursor for --定义游标cursor1
  35. select iid,props from Iteminfos --使用游标的对象
  36. open cursor1 --打开游标
  37.  
  38. fetch next from cursor1 into @iid,@name --将游标向下移1行,获取的数据放入之前定义的变量@iid,@name
  39.  
  40. while @@fetch_status=0 --判断是否成功获取数据
  41. begin
  42. IF((select COUNT(*) FROM fnSplit(@name, ';') WHERE item = '20000:20090')>0)
  43. INSERT INTO #Tmp (ID) VALUES (@iid)
  44. fetch next from cursor1 into @iid,@name --将游标向下移1
  45. end
  46.  
  47. close cursor1 --关闭游标
  48. deallocate cursor1
  49.  
  50. SELECT * FROM dbo.Iteminfos WHERE iid IN( SELECT ID FROM #Tmp)

查询节点的函数

  1. create table tb(id varchar(3) , pid varchar(3) , name varchar(10))
  2. insert into tb values('001' , null , '广东省')
  3. insert into tb values('002' , '001' , '广州市')
  4. insert into tb values('003' , '001' , '深圳市')
  5. insert into tb values('004' , '002' , '天河区')
  6. insert into tb values('005' , '003' , '罗湖区')
  7. insert into tb values('006' , '003' , '福田区')
  8. insert into tb values('007' , '003' , '宝安区')
  9. insert into tb values('008' , '007' , '西乡镇')
  10. insert into tb values('009' , '007' , '龙华镇')
  11. insert into tb values('010' , '007' , '松岗镇')
  12. go
  13. -------------创建方法
  14. create function f_cid(@ID varchar(3)) returns @t_level table(id varchar(3) , level int)
  15. as
  16. begin
  17. declare @level int
  18. set @level = 1
  19. insert into @t_level select @id , @level
  20. while @@ROWCOUNT > 0
  21. begin
  22. set @level = @level + 1
  23. insert into @t_level select a.id , @level
  24. from tb a , @t_Level b
  25. where a.pid = b.id and b.level = @level - 1
  26. end
  27. return
  28. END
  29. GO
  30. --------------使用方法
  31. select a.* from tb a , f_cid('001') b where a.id = b.id order by a.id
  32. --------------调用函数查询(广州市)及其所有子节点
  33. select a.* from tb a , f_cid('002') b where a.id = b.id order by a.id

Exists,Datediff,Newid,

  1. ---两张关联表,删除主表中已经在副表中没有的信息
  2. delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
  3.  
  4. ---日程安排提前五分钟提醒
  5. SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
  6.  
  7. ---随机取出10条数据
  8. select top 10 * from tablename order by newid()
  9.  
  10. -- 类似有 month day year
  11. select * from table1 where convert(varchar,date,120) like '2006-04-01%'
  12. --datediff
  13. select * from table1 where datediff(day,time,'2006-4-1')=0

删除重复值

  1. --1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
  2. select * from people
  3. where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
  4.  
  5. --2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
  6. delete from people
  7. where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
  8. and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
  9.  
  10. --3、查找表中多余的重复记录(多个字段)
  11. select * from vitae a
  12. where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
  13.  
  14. --4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
  15. delete from vitae a
  16. where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
  17. and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
  18.  
  19. --5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
  20. select * from vitae a
  21. where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
  22. and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
  23.  
  24. --经典尝试 删除重复值
  25.  
  26. declare @table table (id int,name nvarchar(10))
  27. insert into @table select 1,'aa'
  28. union all select 1,'aa'
  29. union all select 2,'bb'
  30. union all select 3,'bb'
  31. union all select 4,'cc'
  32. union all select 1,'aa'
  33. union all select 4,'cc'
  34.  
  35. delete a
  36. from (
  37. select id,name,rn = row_number() over (partition by id,name order by id) from @table
  38. ) a where rn > 1
  39.  
  40. select * from @table
  41.  
  42. id name
  43. ----------- ----------
  44. 1 aa
  45. 2 bb
  46. 3 bb
  47. 4 cc
  48.  
  49. (4 row(s) affected)

常用日期转换参数

  1. select CONVERT(varchar, getdate(), 120 )
  2. --结果
  3. 2004-09-12 11:06:08
  4. select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
  5. --结果
  6. 20040912110608
  7. select CONVERT(varchar(12) , getdate(), 111 )
  8. --结果
  9. 2004/09/12
  10. select CONVERT(varchar(12) , getdate(), 112 )
  11. --结果
  12. 20040912
  13. select CONVERT(varchar(12) , getdate(), 102 )
  14. --结果
  15. 2004.09.12

行转列

  1. create table tb(姓名varchar(10) , 课程varchar(10) , 分数int)
  2. insert into tb values('张三' , '语文' , 74)
  3. insert into tb values('张三' , '数学' , 83)
  4. insert into tb values('张三' , '物理' , 93)
  5. insert into tb values('李四' , '语文' , 74)
  6. insert into tb values('李四' , '数学' , 84)
  7. insert into tb values('李四' , '物理' , 94)
  8. go
  9.  
  10. select 姓名 as 姓名,
  11. max(case 课程 when '语文' then 分数 else 0 end) 语文,
  12. max(case 课程 when '数学' then 分数 else 0 end) 数学,
  13. max(case 课程 when '物理' then 分数 else 0 end) 物理,
  14. cast(avg(分数*1.0) as decimal(18,2)) 平均分,
  15. sum(分数) 总分
  16. from tb
  17. group by 姓名
  18.  
  19. --SQL SERVER 2000 动态SQL
  20. declare @sql varchar(8000)
  21. set @sql = 'select 姓名 '
  22. select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
  23. from (select distinct 课程 from tb) as a
  24. set @sql = @sql + ' , cast(avg(分数*1.0) as decimal(18,2)) 平均分, sum(分数) 总分 from tb group by 姓名'
  25. exec(@sql)
  26.  
  27. --姓名 数学 物理 语文 平均分 总分
  28. --李四 84 94 74 84.00 252
  29. --张三 83 93 74 83.33 250

通过子节点ID得到所有父节点

  1. ALTER function [dbo].[f_cid](@id int)
  2. returns @t table(id int,[name] varchar(30),parentid int,lev int)
  3. as
  4. begin
  5. declare @lev int
  6. set @lev=1
  7. insert into @t SELECT cid,name,parent_cid,@lev from TB_ItemCats where cid=@id
  8. while(@@rowcount>0)
  9. begin
  10. set @lev=@lev+1
  11. insert into @t select a.cid,a.name,a.parent_cid,@lev from TB_ItemCats a,@t b
  12. where a.cid=b.parentid and b.lev=@lev-1 AND a.cid NOT IN (select b.id from @t)
  13. end
  14. return
  15. END

123

3232

123

3232

123

3232

123

3232

123

3232

123

3232

123

3232

123

3232

123

3232

123

3232

123

3232

常用SQL收藏的更多相关文章

  1. Mysql 常用 SQL 语句集锦

    Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...

  2. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

        花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...

  3. 常用SQL[ORACLE]

        1.常用系统函数 2.常用sql语句 3.一些定义和关键字 4.需要注意点   1.常用系统函数 ↑ --decode decode(column,if_value,value,elseif_ ...

  4. Oracle常用SQL查询(2)

    三.查看数据库的SQL 1 .查看表空间的名称及大小 select  t.tablespace_name,  round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...

  5. Oracle常用SQL查询

    一.ORACLE的启动和关闭 1.在单机环境下要想启动或关闭oracle系统必须首先切换到oracle用户,如下: su - oracle a.启动Oracle系统 oracle>svrmgrl ...

  6. Mysql 常用 SQL 语句集锦 转载(https://gold.xitu.io/post/584e7b298d6d81005456eb53)

    Mysql 常用 SQL 语句集锦 基础篇 //查询时间,友好提示 $sql = "select date_format(create_time, '%Y-%m-%d') as day fr ...

  7. 50个常用SQL语句

    50个常用SQL语句 Student(S#,Sname,Sage,Ssex) 学生表  S#学号,主键 Course(C#,Cname,T#) 课程表          C#课程号,主键 SC(S#, ...

  8. 测试常用SQL注入语句大全

    转载自Cracer,标题:<渗透常用SQL注入语句大全>,链接http://www.xxxx.com/?p=2226 1.判断有无注入点 整形参数判断 1.直接加' 2.and 1=1 3 ...

  9. oracle sqlplus及常用sql语句

    常用sql语句 有需求才有动力 http://blog.csdn.net/yitian20000/article/details/6256716 常用sql语句 创建表空间:create tables ...

随机推荐

  1. [ecmagent][redis学习][1初识redis] python操作redis

    #1 连接redis # 连接redis -- import redis -- 使用端口连接redis conn = redis.Redis(host=) -- 使用套接字连接 r = redis.R ...

  2. KindleEditor insertfile初始化多个

    KindEditor.ready(function (K) { var editor = K.editor({ allowFileManager: true }); K('#insertfile'). ...

  3. 基于MAC OS 操作系统安装、配置hadoop

    在Mac上安装Hadoop 对我这个之前从未接触过*nix的用户来说,使用命令行来做一系列的事情还是废了一番功夫.特写这个记录,以做备份. 获取Java 我的Mac运行的操作系统是OS X 10.7 ...

  4. Rust安装配置

    Rust安装配置 话说前面: 如果你 之前安装过老版本的 rust 请先卸载 我说的是以 msi 文件安装的那种, 请进控制面板–> 程序中进行卸载 首先 下载官网 的 rustup-init. ...

  5. [洛谷P4630][APIO2018] Duathlon 铁人两项

    题目大意:给一张无向图,求三元组$(u,v,w)$满足$u->v->w$为简单路径,求个数 题解:圆方树,缩点后$DP$,因为同一个点双中的点一定地位相同 卡点:1.$father$数组开 ...

  6. [SDOI2015][bzoj4518] 征途 [斜率优化dp]

    题面 传送门 思路 把$vm^2$展开化一下式子,可以得到这样的等价公式: $vm^2=m\sum_{i=1}^m a_i^2-\sum_{i=1}^m a_i$ 那么我们要最小化的就是$\sum_{ ...

  7. div样式

    DIV样式汇总 一.常用属性: 1.Height:设置DIV的高度. 2.Width:设置DIV的宽度. 例: <div style="width:200px;height:200px ...

  8. 异或值 xor

    题目描述 给出一个 N 个点的带权无向图,要求从 1 号点到 N 号点的一条路径,使得路径上的边 权异或值最大. 输入格式 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M ...

  9. 叶落归根(hometown)

    叶落归根(hometown) 题目描述 叶落归根——树叶从树根生发出来,凋落后最终还是回到树根.比喻事物总有一定的归宿.接下来是题目. 给定一个n个点的有向图G(点的编号为1~n),一开始落叶(仅作为 ...

  10. bzoj [Noi2008] 1061 志愿者招募 单纯形

    [Noi2008]志愿者招募 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 5437  Solved: 3267[Submit][Status][Di ...