SQL常見問題積累


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 中字母大小寫的轉換

  ①將大寫字母改為小寫字母
    update 表名 set 字段名a=  Lower(字段a)  
  ②將小寫字母轉化成大寫字母
    update 表名 set 字段名a=  upper(字段名a) 

 

 12、表還原(重置)

  sql幾種"刪除"

  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
   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM