初級進階版SQL語句總結(1)
我不是專業的DBA,這裡記錄的都是一些常用的SQL技能點,為的是熟練掌握這些來提高我們的工作效率,如果想系統學習SQL的話,那恐怕要讓您失望了。
1、case項作為排序條件
case常常被用來對欄位內容進行轉換,除此之外還能用作排序條件,這種用法我之前用的不多,記錄下來希望對大家有幫助。 ``` select * from Sys_Module where ModuleCode=2589 or ParentCode=2589 order by case ModuleCode when 2595 then 1 else 0 end desc,ModuleCode desc ``` ![這裡寫圖片描述](https://img-blog.csdn.net/20171107173441697?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3VuY2xl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)除了通過case單列進行排序外,還可以按照多列進行混合排序
select * from Sys_Module where ModuleCode=2589 or ParentCode=2589
order by case when ParentCode=30 then 2 when ModuleCode=2595 then 1 else 0 end desc,ModuleCode desc
2、CharIndex函式
在一個表示式中搜尋另一個表示式,如果找到則返回其起始位置,如果找不到則返回0。 注意:返回的起始位置從 1 開始,而不是從 0 開始。 語法: CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] ) expressionToFind 是字元表示式,其中包含要查詢的序列。 expressionToFind限制為 8000 個字元。 expressionToSearch 是要搜尋的字元表示式。 start_location 是整數或bigint開始搜尋的表示式。 如果start_location未指定、 為負數,或為 0,則從expressionToSearch首字母處開始搜尋。 ``` select *,CHARINDEX(',6661,',','+StoreNO+',') as CharIndex from StoreInfo select *,CHARINDEX(',6661,',','+StoreNO+',',0) as CharIndex from StoreInfo select *,CHARINDEX(',6661,',','+StoreNO+',',1) as CharIndex from StoreInfo ``` 執行截圖如下: ![這裡寫圖片描述](https://img-blog.csdn.net/20171114130459185?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3VuY2xl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)select *,CHARINDEX(',6661,',','+StoreNO+',',2) as CharIndex from StoreInfo
執行截圖如下:
3、CONVERT函式
在做查詢頁的時候,有時會需要查詢某天的內容,比如查詢2017/11/21這一天的資訊,我們可以使用date>2017/11/21 00:00:00 and date<=2017/11/22 00:00:00,我覺得這個有點麻煩想找個一句話就能搞定的方法,就有了下邊的知識點。select Id,UserName,CreateDate,CONVERT(nvarchar(10),CreateDate,120) from Sys_User
where CONVERT(nvarchar(10),CreateDate,120)='2017-11-16'
截圖如下:
select Id,UserName,CreateDate,CONVERT(nvarchar(10),CreateDate,111) from Sys_User
where CONVERT(nvarchar(10),CreateDate,111)='2017/11/16'
截圖如下:
如果只想以時分秒為條件進行查詢,不考慮年月日的話,可以使用下面的方法:
select Information,InformTime,IsRead,CONVERT(nvarchar(12),GETDATE(),114) from Ser_Inform
where CONVERT(nvarchar(12),GETDATE(),114) < CONVERT(nvarchar(12),InformTime,114)
截圖如下:
4、DATEADD()
DATEADD() 函式可以在日期中新增或減去指定的時間間隔。 ``` select UserName,UserPwd,Sex,CreateDate,DATEADD(YEAR,1,CreateDate) from Sys_User select UserName,UserPwd,Sex,CreateDate,DATEADD(MONTH,1,CreateDate) from Sys_User select UserName,UserPwd,Sex,CreateDate,DATEADD(DAY,1,CreateDate) from Sys_User select UserName,UserPwd,Sex,CreateDate,DATEADD(HOUR,-1,CreateDate) from Sys_User select UserName,UserPwd,Sex,CreateDate,DATEADD(MINUTE,-1,CreateDate) from Sys_User select UserName,UserPwd,Sex,CreateDate,DATEADD(SECOND,-1,CreateDate) from Sys_User ``` DATEADD(YEAR,1,CreateDate)截圖如下: ![這裡寫圖片描述](https://img-blog.csdn.net/20171128125238497?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3VuY2xl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) DATEADD(HOUR,-1,CreateDate)截圖如下: ![這裡寫圖片描述](https://img-blog.csdn.net/20171128125257281?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb3VuY2xl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)5、DATEDIFF()
DATEDIFF() 函式返回兩個日期之間的時間差。 語法:DATEDIFF(datepart,startdate,enddate) 時間差:enddate-startdateselect UserName,UserPwd,Sex,CreateDate,DATEDIFF(YEAR,CreateDate,GETDATE()) from Sys_User
select UserName,UserPwd,Sex,CreateDate,DATEDIFF(MONTH,CreateDate,GETDATE()) from Sys_User
select UserName,UserPwd,Sex,CreateDate,DATEDIFF(DAY,CreateDate,GETDATE()) from Sys_User
select UserName,UserPwd,Sex,CreateDate,DATEDIFF(HOUR,CreateDate,GETDATE()) from Sys_User
select UserName,UserPwd,Sex,CreateDate,DATEDIFF(MINUTE,CreateDate,GETDATE()) from Sys_User
select UserName,UserPwd,Sex,CreateDate,DATEDIFF(SECOND,CreateDate,GETDATE()) from Sys_User
DATEDIFF(DAY,CreateDate,GETDATE())截圖如下:
DATEDIFF(HOUR,CreateDate,GETDATE())截圖如下:
6、欄位值補齊8位
--雖然想補齊到8位,但最多能補3個'0'(right表示從右邊開始擷取)
select top 5 Id, right(replicate('0',3)+ltrim(Name),8),Phone from Sys_User
--雖然最多能補10個'0',但只需補齊到8位(right表示從右邊開始擷取)
select top 5 Id, right(replicate('0',10)+ltrim(Name),8),Phone from Sys_User
7、查詢資料庫中有多少個表/檢視
--查詢使用者表數量
select count(1) from sysobjects where xtype='U'
--查詢使用者檢視數量
select count(1) from sysobjects where xtype='V'
--查詢使用者儲存過程數量
select count(1) from sysobjects where xtype='P'
sysobjects表中xtype列各欄位的意思:
C = CHECK 約束
D = 預設值或 DEFAULT 約束
F = FOREIGN KEY 約束
L = 日誌
FN = 標量函式
IF = 內嵌表函式
PK = PRIMARY KEY 約束(型別是 K)
UQ = UNIQUE 約束(型別是 K)
RF = 複製篩選儲存過程
TF = 表函式
TR = 觸發器
S = 系統表
U = 使用者表
V = 檢視
P = 儲存過程
X = 擴充套件儲存過程
8、待發現
相關文章
- 常用sql進階語句SQL
- SQL進階總結(二)SQL
- SQL語句規範總結SQL
- MySQL基本sql語句總結MySql
- sql語句學習總結SQL
- SQL語句使用總結(一)SQL
- SQL單表查詢語句總結SQL
- MyCat不支援的SQL語句總結SQL
- Java初級~中級~高階進階之路Java
- oracle語句練習--初級Oracle
- 常用SQL語句彙總SQL
- Mysql跨表更新 多表update sql語句總結MySql
- 總結出10條SQL語句優化精髓SQL優化
- Mysql 資料庫 -------- SQL語句進階查詢 ------- 前部分MySql資料庫
- SQL語句在oracle資料庫中的初級應用(上)SQLOracle資料庫
- SQL語句的4個階段SQL
- [MS SQL]高階SQL總結SQL
- jquery常用語句總結jQuery
- 賓語從句總結
- Oracle行轉列、列轉行的Sql語句總結OracleSQL
- oracle 使用者跟蹤 需要的sql語句總結OracleSQL
- MYSQL 常用sql語句小結MySql
- 通過分析SQL語句的執行計劃優化SQL(總結)SQL優化
- MySql常用操作SQL語句彙總MySql
- JavaScript進階之流程控制語句JavaScript
- 【轉】經典SQL語句大全1SQL
- sql語法總結SQL
- MySQL -update語句流程總結MySql
- MySql相關語句總結MySql
- Oracle經典sql語句總結@sql-plus重點函式串講與sql語句案例@中文排序詳講).docOracleSQL函式排序
- Sybase及SQL Anywhere SQL語句小結(轉)SQL
- 找工作筆試面試那些事兒(10)---SQL語句總結筆試面試SQL
- 透過分析SQL語句的執行計劃最佳化SQL(總結)SQL
- SQL語句查詢表結構SQL
- sql的聯結語句詳解SQL
- SQLite SQL語句結構詳解SQLite
- 簡單SQL語句小結(轉)SQL
- 前端面試總結篇(初級)前端面試