SQL積累--僅適用於SQL Server
1、sql中,字符串保存序號,按照數字順序進行排序
order by RIGHT(REPLICATE('0',10)+CAST(householdNo AS varchar(10)),10) asc --householdNo 為要排序字段
2、控制小數位數
convert(varchar,convert(decimal(18,2),ROUND(Num1/Num2*100,2)))+'%' as XXRate
convert(varchar,convert(decimal(18,2),ROUND(Num1/Num2*100,2)))+'%' as XXRate ,
--- ROUND(待四舍五入小數,四舍五入位數):是四舍五入,但是並不會改變數字的長度。
--- convert():第一個convert,將四舍五入完的小數截取小數位數,通過decimal(18,2)實現控制小數位數為2
--- convert():第二個convert,將四舍五入並截取小數位數的數字轉化為字符串類型,后加百分號,完成百分比顯示
拓展:int型除法,要得到百分比時注意兩點:①被除數不為0 ②除數先轉換成浮點型。
值得注意的是:Num1應該保證是浮點數。
3、建完表不能修改問題
菜單工具欄“工具”---選項----設計器---組織保存要求重新創建表的更改,去掉選擇。
4、分析器顯示行號
勾選行號選項后確定,分析器中邊出現了行號。
5、SQL觸發器
創建某個表的觸發器的SQL語句
USE Test_PMDemo -----添加時的觸發器 GO create trigger EstimateInsert on PM_Project --將要進行更改的表名 for insert --給表插入一條數據的時候觸發 as declare @PrjID uniqueidentifier --定義一個變量 select @PrjID = ID from inserted --把查詢出的指定字段的值賦值給變量 INSERT INTO PM_Estimate(id,PrjID) VALUES(newid(),@PrjID) --插入語句
-----刪除時的觸發器 GO create trigger EstimateDelete on PM_Project --將要進行更改的表名 for delete --給表插入一條數據的時候觸發 as declare @PrjID uniqueidentifier --定義一個變量 select @PrjID = ID from deleted --把查詢出的指定字段的值賦值給變量 delete from PM_Estimate where PrjID=@PrjID ----刪除語句
6、SQL Server 時間字符串轉換為DateTime格式
SELECT GETDATE() -------獲取當前時間 SELECT CONVERT(DATETIME,'2018-06-26 09:54:30.027'); --------將時間字符串轉換為DATETIME格式,
7、SQL字符串截取
1、CHARINDEX(substr ,str):返回子串 substr 在字符串 str 中第一次出現的位置,如果字符substr在字符串str中不存在,則返回0;
2、LEFT(str, length):從左邊開始截取str,length是截取的長度;
3、RIGHT(str, length):從右邊開始截取str,length是截取的長度;
4、SUBSTRING(str ,n ,m):返回字符串str從第n個字符截取到第m個字符;
5、REPLACE(str, n, m):將字符串str中的n字符替換成m字符;
6、LEN(str):計算字符串str的長度;
7、REVERSE(str):把字符串倒置;REVERSE("1234"); ----> 4321
sqlserver函數大全:https://wenku.baidu.com/view/e2e19dec172ded630b1cb628.html###
實例:
SELECT ...,SGCompInfo, SUBSTRING(SGCompInfo,0,CHARINDEX(',' ,SGCompInfo)) SGComp, SUBSTRING(SGCompInfo,CHARINDEX(',' ,SGCompInfo)+1,LEN(SGCompInfo)) SGer,... FROM ....
執行結果:
8、將一個表中數據插入(insert)到另一個表中
insert into hh (fielda,fieldb,fieldc) select fieldx,fieldy,fieldz from mm
9、sql字符串替換 replace函數
replace(源字符串,字符串中某個字符或字符串,要修改為哪個字段)
例:(以時間格式轉為時間戳為例)
select CONVERT(varchar,GETDATE(),21) timenow1 select CONVERT(char(17),replace(replace(replace(replace(CONVERT(varchar,GETDATE(),21),'-',''),':',''),' ',''),'.',''))timenow2
執行結果:
10、有關索引
11、SQL 中字母大小寫的轉換
12、表還原(重置)
truncate table 表名
---實例 truncate table WorkFlowArchives
13、日期比較
select*from Log where datediff(DAY,WriteTime,CONVERT(datetime,'2018-10-17',101))<0
14、行轉列、列轉行
https://blog.csdn.net/qq_39774060/article/details/80618094
--- 持續更新中---
* SQL Server 日期格式化輸出
最常用格式
SELECT CONVERT(VARCHAR(100), GETDATE(), 111) 結果:2010/03/06
SELECT CONVERT(VARCHAR(100), GETDATE(), 23) 結果:2010-03-06
T-SQL Script | Output format |
SELECT CONVERT(VARCHAR(100), GETDATE(), 0) | 03 6 2010 4:19PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 1) | 03/06/10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 2) | 10.03.06 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 3) | 06/03/10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 4) | 06.03.10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 5) | 06-03-10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 6) | 06 03 10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 7) | 03 06, 10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 8) | 16:23:28 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 9) | 03 6 2010 4:23:40:110PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 10) | 03-06-10 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 11) | 10/03/06 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 12) | 100306 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 13) | 06 03 2010 16:24:39:763 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 14) | 16:24:50:823 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 20) | 2010-03-06 16:25:04 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 21) | 2010-03-06 16:25:18.107 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 22) | 03/06/10 4:25:27 PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 23) | 2010-03-06 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 24) | 16:26:48 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 25) | 2010-03-06 16:26:55.810 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 100) | 03 6 2010 4:27PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 101) | 03/06/2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 102) | 2010.03.06 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 103) | 06/03/2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 104) | 06.03.2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 105) | 06-03-2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 106) | 06 03 2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 107) | 03 06, 2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 108) | 16:28:25 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 109) | 03 6 2010 4:28:35:123PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 110) | 03-06-2010 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 111) | 2010/03/06 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 112) | 20100306 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 113) | 06 03 2010 16:29:25:217 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 114) | 16:29:32:543 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 120) | 2010-03-06 16:29:44 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 121) | 2010-03-06 16:29:51.030 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 126) | 2010-03-06T16:29:59.327 |
SELECT CONVERT(VARCHAR(100), GETDATE(), 130) | 21 ???? ????? 1431 4:30:06:780PM |
SELECT CONVERT(VARCHAR(100), GETDATE(), 131) | 21/03/1431 4:30:21:990PM |