總結一下平時用到最多的sql語句 1.特殊日期 --今天凌晨SELECT DATEADD(dd,DATEDIFF(dd,0,GETDATE()),0)--明天凌晨SELECT DATEADD(dd,DATEDIFF(dd,0,GETDATE())+1,0)--當周周一(每周從周日開始)SELECT ...
總結一下平時用到最多的sql語句
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'