SqlServer常用內置函數


--=======================================
-- SQL常用內置函數
--=======================================

--判斷為null函數
declare @abc varchar(5)
set @abc='mnw'
select isnull(@abc,0);  --如果變量abc值為null,則取0,否則取被賦的值


--查找索引函數
select charindex('abc','bac abc fmd abc'); --獲取字符串abc在長字符串bac abc fmd abc中的索引位置,索引默認從1開始找
select charindex('abc','bac abc fmd abc',9); --索引從9開始找


--重復獲取函數
select replicate('m',3); --按指定次數重復字符表達式,將m字符重復三次
select replicate('abc',2);--將字符串abc重復2次


--大小寫轉換函數
select len('datazsrt'); --獲取字符串長度
select lower('ADRTddd'); --轉小寫
select upper('data');--轉大寫



--替換截取函數
select substring('abcdef111',2,3); --截取字符串

select replace('dadt123','t1','AA'); --替換字符串



--類型轉換函數
select cast('2015-08-02' as datetime) as 日期類型; --數據類型轉換,CAST是ANSI兼容的,而CONVERT則不是

select 'ab'+cast(1 as varchar);-- 將1轉化為字符串與ab相加

select convert(datetime,'2015-08-02'); --數據類型轉換,與cast相同

select convert(varchar(19),getdate(),113); --不同的是convert還提供一些特別的日期格式轉換,而cast沒有這個功能

select format(getdate(),'yyyy/mm/dd'); --將日期轉化為規定的格式

   
   
--數學函數    
select round(2.15,1); --四舍五入,第二個參數索引從0開始,即:0表示小數后第一位進行判斷

select ceiling(2.158); --向上取整

select floor(2.713); --向下取整



--日期函數
select getdate();

select datepart(mm,'2015-08-04 15:28:26');  --返回日期的某一部分  yy,mm,dd,hh,mi,ss,

select dateadd(dd,-25,'2015-08-04 15:28:26'); --在日期中加上或減去制定的時間間隔,給天數減25天

select datediff(day,'2008-06-05','2008-08-05') as 天數; --返回兩個日期之間的天數



--聚合函數
count(),min(),max(),avg(),sum()



--4個排名函數,都可以與over()結合使用
row_number(),rank(),dense_rank(),ntile()

select row_number() over(order by column_name),* from table_name; --按某個字段排名然后查詢出所有值,它會為查詢出來的每一行記錄生成一個序號,依次排序且不會重復
select row_number() over(order by column_name),* from table_name order by column_name desc; --先按某個字段排名給出序號,然后再根據另一個字段進行倒敘排列,排出序號可能會被打亂


select rank() over(order by column_name),* from table_name; --rank函數會考慮到column_name中的值會重復或相同,那個給出的序號也會相同。但生成的序號不是連續的,rank是跳躍排序

select dense_rank() over(order by column_name),* from table_name; --dense_rank函數不同與rank函數,它生成的序號是連續的,dense_rank不會跳躍


--ntile()函數還是比較麻煩的排序分組函數

select ntile(4) over(order by column_name des),* from table_name;  --先對column_name進行倒序排列, 參數4表示分為4組,每組中有多少個相同的序號要根據(總記錄數/總組數)+1 條

--如果一個表中有6條數據,那么(6/4)+1=2;每組中有兩個相同的記錄數,末尾的根據情況分配,必須要分4組。但如果是8條數據,能整除,8/4=2;就不需要再加1,每組中平均分兩條相同記錄數的數據

 


免責聲明!

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



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