--======================================= -- 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,每組中平均分兩條相同記錄數的數據