设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2592|回复: 0

平时常用sql

[复制链接]

6

主题

62

金钱

101

积分

入门用户

发表于 2019-12-20 13:50:18 | 显示全部楼层 |阅读模式

1.特殊日期
  1. --今天凌晨
  2. SELECT DATEADD(dd,DATEDIFF(dd,0,GETDATE()),0)
  3. --明天凌晨
  4. SELECT DATEADD(dd,DATEDIFF(dd,0,GETDATE())+1,0)
  5. --当周周一(每周从周日开始)
  6. SELECT DATEADD(wk,DATEDIFF(wk,0,GETDATE()),0)
  7. --当月的第一天
  8. SELECT DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)
  9. --当月的最后一天
  10. SELECT DATEADD(dd,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE())+1,0))
  11. --今年的第一天
  12. SELECT DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)
  13. --今年的最后一天
  14. SELECT DATEADD(dd,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE())+1,0))
复制代码


2.字符串处理
  1. --去除空格
  2. SELECT LTRIM(col1),RTRIM(col2),LTRIM(RTRIM(col3)) FROM tableName

  3. SELECT
  4. SUBSTRING(col1,3,2) --从第3个字符开始截取2个,得到截取的2个字符
  5. ,STUFF(col2,3,2,'')--从第3个字符开始删除2个,得到剩下字符
  6. ,STUFF(col3,3,2,'XXX')--从第3个字符开始,将第3、4两个字符替换成XXX
  7. ,REPLACE(col4,'old','new')--将col4中的old全部替换成new
  8. FROM tableName


  9. --将列col1用,拼接起来
  10. SELECT STUFF((SELECT ','+col1 FROM tableName WHERE 过滤条件 FOR XML PATH('')),1,1,'')


  11. --多位流水号,用0或空格补充 例如A000001,A000002……,前缀可为固定字符,或者可变的年、月、日等
  12. DECLARE @flowNo AS VARCHAR(10)
  13. DECLARE @nextNo AS int

  14. SELECT @flowNo = MAX(flowNo) FROM tableName WHERE 过滤条件
  15. IF(@flowNo IS null)
  16.   SET @flowNo = 'A000001'
  17. ELSE
  18.   BEGIN
  19.     SET @nextNo = RIGHT(@flowNo,6)+1
  20.     SET @flowNo = LEFT(@flowNo,1)+REPLICATE('0',6-LEN(@nextNo))+CONVERT(VARCHAR(6),@nextNo)
  21.   END
  22. SELECT @flowNo;--要获取的流水号



  23. --年 2001对应1,2009对应9,2010对应A,2035对应Z,2035之后的可自行调整
  24. SELECT SUBSTRING('123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',(YEAR(GETDATE())-2000)%36,1)

  25. --月 10月,11月,12月分别对应A,B,C
  26. SELECT SUBSTRING('123456789ABC',MONTH(GETDATE()),1)

  27. --月 英文简写
  28. SELECT SUBSTRING('JanFebMarAprMayJunJulAugSepOctNovDec',(MONTH(GETDATE())-1)*3+1,3)

  29. --日 1号对应1,9号对应9,10号对应A,以此类推
  30. SELECT SUBSTRING('123456789ABCDEFGHIJKLMNOPQRSTUV',DAY(GETDATE()),1)
复制代码


3.辅助
  1. --去除重复数据,数据表中有很多重复数据,如果其中col1,col2,col3,col4,col5可以表示出每一组重复数据
  2. ;WITH cte AS
  3.   (SELECT col1,col2,col3,col4,col5
  4.   ,ROW_NUMBER()OVER(PARTITION BY col1,col2,col3,col4,col5 ORDER BY col1) AS rn
  5.   FROM tableName)
  6. DELETE FROM cte WHERE rn > 1


  7. --快速打开存储过程、视图等
  8. sp_helptext 存储过程名称 --名称前不要加dbo.等所有者
  9. sp_helptext 视图名称 --名称前不要加dbo.等所有者


  10. --用到了某些字符串的视图,存储过程
  11. SELECT a.name,b.[text]
  12. FROM sysobjects a
  13. INNER JOIN syscomments b ON a.id = b.id
  14. WHERE b.[text] LIKE '%你要查的字符串%'
  15. AND a.xtype='v'--'p'


  16. --获取表tableName中所有的列名,并用组合。写insert的时候简直不要太爽
  17. SELECT STUFF((SELECT ','+name
  18.   FROM syscolumns
  19.   WHERE id = OBJECT_ID('tableName')
  20.   ORDER BY colorder   --colorder:按照列的添加顺序    name:按照列名顺序
  21.   FOR xml path('')),1,1,'')
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表