|
1.特殊日期
- --今天凌晨
- SELECT DATEADD(dd,DATEDIFF(dd,0,GETDATE()),0)
- --明天凌晨
- SELECT DATEADD(dd,DATEDIFF(dd,0,GETDATE())+1,0)
- --当周周一(每周从周日开始)
- SELECT DATEADD(wk,DATEDIFF(wk,0,GETDATE()),0)
- --当月的第一天
- SELECT DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)
- --当月的最后一天
- SELECT DATEADD(dd,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE())+1,0))
- --今年的第一天
- SELECT DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)
- --今年的最后一天
- SELECT DATEADD(dd,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE())+1,0))
复制代码
2.字符串处理
- --去除空格
- SELECT LTRIM(col1),RTRIM(col2),LTRIM(RTRIM(col3)) FROM tableName
- SELECT
- SUBSTRING(col1,3,2) --从第3个字符开始截取2个,得到截取的2个字符
- ,STUFF(col2,3,2,'')--从第3个字符开始删除2个,得到剩下字符
- ,STUFF(col3,3,2,'XXX')--从第3个字符开始,将第3、4两个字符替换成XXX
- ,REPLACE(col4,'old','new')--将col4中的old全部替换成new
- FROM tableName
- --将列col1用,拼接起来
- SELECT STUFF((SELECT ','+col1 FROM tableName WHERE 过滤条件 FOR XML PATH('')),1,1,'')
- --多位流水号,用0或空格补充 例如A000001,A000002……,前缀可为固定字符,或者可变的年、月、日等
- DECLARE @flowNo AS VARCHAR(10)
- DECLARE @nextNo AS int
- SELECT @flowNo = MAX(flowNo) FROM tableName WHERE 过滤条件
- IF(@flowNo IS null)
- SET @flowNo = 'A000001'
- ELSE
- BEGIN
- SET @nextNo = RIGHT(@flowNo,6)+1
- SET @flowNo = LEFT(@flowNo,1)+REPLICATE('0',6-LEN(@nextNo))+CONVERT(VARCHAR(6),@nextNo)
- END
- SELECT @flowNo;--要获取的流水号
-
- --年 2001对应1,2009对应9,2010对应A,2035对应Z,2035之后的可自行调整
- SELECT SUBSTRING('123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',(YEAR(GETDATE())-2000)%36,1)
- --月 10月,11月,12月分别对应A,B,C
- SELECT SUBSTRING('123456789ABC',MONTH(GETDATE()),1)
- --月 英文简写
- SELECT SUBSTRING('JanFebMarAprMayJunJulAugSepOctNovDec',(MONTH(GETDATE())-1)*3+1,3)
- --日 1号对应1,9号对应9,10号对应A,以此类推
- SELECT SUBSTRING('123456789ABCDEFGHIJKLMNOPQRSTUV',DAY(GETDATE()),1)
复制代码
3.辅助
- --去除重复数据,数据表中有很多重复数据,如果其中col1,col2,col3,col4,col5可以表示出每一组重复数据
- ;WITH cte AS
- (SELECT col1,col2,col3,col4,col5
- ,ROW_NUMBER()OVER(PARTITION BY col1,col2,col3,col4,col5 ORDER BY col1) AS rn
- FROM tableName)
- DELETE FROM cte WHERE rn > 1
- --快速打开存储过程、视图等
- sp_helptext 存储过程名称 --名称前不要加dbo.等所有者
- sp_helptext 视图名称 --名称前不要加dbo.等所有者
- --用到了某些字符串的视图,存储过程
- SELECT a.name,b.[text]
- FROM sysobjects a
- INNER JOIN syscomments b ON a.id = b.id
- WHERE b.[text] LIKE '%你要查的字符串%'
- AND a.xtype='v'--'p'
- --获取表tableName中所有的列名,并用组合。写insert的时候简直不要太爽
- SELECT STUFF((SELECT ','+name
- FROM syscolumns
- WHERE id = OBJECT_ID('tableName')
- ORDER BY colorder --colorder:按照列的添加顺序 name:按照列名顺序
- FOR xml path('')),1,1,'')
复制代码
|
|