平時經常使用sql

 

總結一下平時用到最多的sql語句sql

 

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 
 4 SELECT 
 5 SUBSTRING(col1,3,2) --從第3個字符開始截取2個,獲得截取的2個字符
 6 ,STUFF(col2,3,2,'')--從第3個字符開始刪除2個,獲得剩下字符
 7 ,STUFF(col3,3,2,'XXX')--從第3個字符開始,將第三、4兩個字符替換成XXX
 8 ,REPLACE(col4,'old','new')--將col4中的old所有替換成new
 9 FROM tableName
10 
11 
12 --將列col1用,拼接起來
13 SELECT STUFF((SELECT ','+col1 FROM tableName WHERE 過濾條件 FOR XML PATH('')),1,1,'')
14 
15 
16 --多位流水號,用0或空格補充 例如A000001,A000002……,前綴可爲固定字符,或者可變的年、月、日等
17 DECLARE @flowNo AS VARCHAR(10)
18 DECLARE @nextNo AS int
19 
20 SELECT @flowNo = MAX(flowNo) FROM tableName WHERE 過濾條件 
21 IF(@flowNo IS null)
22   SET @flowNo = 'A000001'
23 ELSE 
24   BEGIN
25     SET @nextNo = RIGHT(@flowNo,6)+1
26     SET @flowNo = LEFT(@flowNo,1)+REPLICATE('0',6-LEN(@nextNo))+CONVERT(VARCHAR(6),@nextNo)
27   END 
28 SELECT @flowNo;--要獲取的流水號
29 
30  
31 
32 --年 2001對應1,2009對應9,2010對應A,2035對應Z,2035以後的可自行調整
33 SELECT SUBSTRING('123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',(YEAR(GETDATE())-2000)%36,1)
34 
35 --月 10月,11月,12月分別對應A,B,C
36 SELECT SUBSTRING('123456789ABC',MONTH(GETDATE()),1)
37 
38 --月 英文簡寫
39 SELECT SUBSTRING('JanFebMarAprMayJunJulAugSepOctNovDec',(MONTH(GETDATE())-1)*3+1,3)
40 
41 --日 1號對應1,9號對應9,10號對應A,以此類推
42 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 
 9 --快速打開存儲過程、視圖等
10 sp_helptext 存儲過程名稱 --名稱前不要加dbo.等全部者
11 sp_helptext 視圖名稱 --名稱前不要加dbo.等全部者
12 
13 
14 --用到了某些字符串的視圖,存儲過程
15 SELECT a.name,b.[text] 
16 FROM sysobjects a 
17 INNER JOIN syscomments b ON a.id = b.id
18 WHERE b.[text] LIKE '%你要查的字符串%'
19 AND a.xtype='v'--'p'
20 
21 
22 --獲取表tableName中全部的列名,並用組合。寫insert的時候簡直不要太爽
23 SELECT STUFF((SELECT ','+name 
24   FROM syscolumns 
25   WHERE id = OBJECT_ID('tableName') 
26   ORDER BY colorder   --colorder:按照列的添加順序    name:按照列名順序
27   FOR xml path('')),1,1,'')
相關文章
相關標籤/搜索