SQL Server 2008 R2 常用系統函數學習


/*******************************************
 * 聚合函數
 *******************************************/

SELECT AVG(id)  AS Average
FROM   school   AS s  --返回組中各值的平均值 *

SELECT COUNT(id)
FROM   school AS s  --返回組中的項數 *

SELECT COUNT_BIG(id)
FROM   school AS s --返回組中的項數 *

SELECT MAX(id)
FROM   school AS s  --返回表達式的最大值 *

SELECT MIN(id)
FROM   school AS s  --返回表達式的最小值 *

SELECT SUM(id)
FROM   school AS s --返回表達式中所有值的和或僅非重復值的和 *

SELECT VAR(id)
FROM   school AS s --返回給定表達式中所有值的方差 *

SELECT VARP(id)
FROM   school AS s  --返回給定表達式中所有值的總體方差 *

/*******************************************
 * 配置函數
 *******************************************/

SELECT CONNECTIONPROPERTY('net_transport') AS 'Net transport'
      ,CONNECTIONPROPERTY('protocol_type') AS 'Protocol type' 
 --返回連接屬性的屬性值 *

SELECT @@DBTS  --返回當前數據庫的當前timestamp數據類型的值。此時間戳在數據庫中保證是唯一的 *

SELECT @@LANGUAGE --返回當前所用語言的名稱 *

SELECT @@LOCK_TIMEOUT --返回當前會話的當前鎖定超時設置(毫秒)  沒有設置則返回-1 *

SELECT @@MAX_CONNECTIONS --返回允許同時進行的最大用戶連接數 *

SELECT @@MAX_PRECISION --按照服務器中的當前設置,返回decimal 和numeric 數據類型作用的精度級別 *

SELECT @@NESTLEVEL --返回當前存儲過程執行的嵌套級別(初始值為 0) *

SELECT @@OPTIONS --返回有關當前 SET 選項的信息 *

SELECT @@REMSERVER --返回遠程SQL Server 在登錄記錄中顯示的名稱 *

SELECT @@SERVERNAME --返回本地SQL Server的名稱 *

SELECT @@SERVICENAME --返回目前用於運行SQL Server的注冊表項的名稱 *

SELECT @@SPID --返回當前用戶進程的服務器進程標識符 *

SELECT @@TEXTSIZE --返回SET語句中的TEXTSIZE選項的當前值 *

SELECT @@VERSION --返回當前安裝的SQL Server的日期、版本和處理器類型 *


 /*******************************************
 * 游標函數
 *******************************************/


SELECT @@CURSOR_ROWS  --返回連接上打開的上一個游標中的當前限定行的數目 *

SELECT CURSOR_STATUS('LOCAL、GLOBAL 或 VARIABLE' ,'游標名稱或變量') --一個標量函數,它允許存儲過程的調用方確定該存儲過程是否已為給定的參數返回了游標和結果集 *

SELECT @@FETCH_STATUS --返回針對連接當前打開的任何游標發出的上一條游標FRTCH語句的狀態 *


 /*******************************************
 * 日期和時間函數
 *******************************************/


SELECT CURRENT_TIMESTAMP --返回當前日期和時間 *

 /*
 * 參數1:時間日期的樣式
 * 參數2:增量
 * 參數3:datetime 時間日期表達式
 * */
SELECT DATEADD(DAY ,1 ,CURRENT_TIMESTAMP) --根據給指定日期增加的時間間隔,返回新的datetime值 *

 /*
 * 參數1:時間日期的樣式
 * 參數2:datetime 開始時間日期表達式
 * 參數3:datetime 結束時間日期表達式
 * */
SELECT DATEDIFF(DAY ,CURRENT_TIMESTAMP ,DATEADD(DAY ,1 ,CURRENT_TIMESTAMP)) --返回跨兩個指定日期的日期和時間邊界數 *

  /*
 * 參數1:時間日期的樣式
 * 參數2:datetime 時間日期表達式
 * */
SELECT DATENAME(DAY ,CURRENT_TIMESTAMP) --返回表示指定日期的指定日期部分的字符串 
SELECT DATEPART(DAY ,CURRENT_TIMESTAMP) --返回表示指定日期的指定日期部分的整數 
 
SELECT DAY(CURRENT_TIMESTAMP) --返回表示指定日期的"日"日期部分的整數
SELECT GETDATE() --返回當前的系統日期和時間 *
SELECT GETUTCDATE() --返回表示當前UTC時間的datetime值 *
 
IF ISDATE(2018-01-13)>0
BEGIN
    PRINT N'Is date'
END
ELSE
BEGIN
    PRINT N'Not date'
END
--確定輸入表達式是否為有效的日期 *

SELECT MONTH(CURRENT_TIMESTAMP) --返回表示指定日期的"月"日期部分的整數

SELECT SYSDATETIME() --返回當前數據庫系統時間戳作為datetime(7)值 *
SELECT SYSDATETIMEOFFSET() --返回當前數據庫系統時間戳作為datetimeoffset值,其中保留了數據庫時區偏移量 *
SELECT SYSUTCDATETIME() --返回當前數據庫系統時間戳(UTC)作為datetime2(7)值 *

SELECT SWITCHOFFSET(SYSDATETIMEOFFSET(),'-08:00') --將datetimeoffset值從保留的時區偏移量更改為新值
/*SELECT Todatetimeoffset(表達式(datetime),時區(varchar)) --將本地datetime值和時區偏移量轉換為保留了給定時區偏移量的datetimeoffset */

SELECT YEARCURRENT_TIMESTAMP) --返回表示指定日期的"年"日期部分的整數 *


 /*******************************************
 * 數學函數
 *******************************************/


SELECT ABS(-100)  --返回給定數值表達式的絕對值(正數) *
 
SELECT CEILING(100.21) --返回大於等於給定數值表達式的最小整數 *
 
SELECT FLOOR(99.21) --返回小於等於給定數值表達式的最大整數 *
 
SELECT PI() --返回PI的常量值(3.1415926...) *
 
SELECT RAND() --返回0-1之間的隨機浮點值 *
 
SELECT ROUND(9.26543,2) --返回數值表達式,舍入到指定的長度或精度 *
 
SELECT SIGN(-9.39)  --返回給定表達式的正號(+1)、零(0)或符號(-1) *
 
SELECT POWER(2,3)  --返回給定表達式的指定冪的值 *
 
SELECT SQRT(2.55) --返回給定表達式的平方根 *
 
SELECT SQUARE(3) --返回給定表達式的平方 *


 /*******************************************
 * 元數據函數
 *******************************************/


SELECT COL_LENGTH('dbo.school' , 'name') --返回定義的列的長度(字節) *
 
SELECT COL_NAME(OBJECT_ID('dbo.school'),2) --返回數據庫列的名稱 *
 
SELECT COLUMNPROPERTY(OBJECT_ID('dbo.school'),'name','PRECISION') --返回該列的定義長度  --返回列參數或過程參數的屬性值 *
 
SELECT DATABASEPROPERTYEX('schools', 'IsAutoShrink') AS AUTO_SHRINK_Status ,
        DATABASEPROPERTYEX('schools', 'Collation') AS Collation,  
        DATABASEPROPERTYEX('schools', 'Edition') AS Edition,  
        DATABASEPROPERTYEX('schools', 'ServiceObjective') AS ServiceObjective,  
        DATABASEPROPERTYEX('schools', 'MaxSizeInBytes') AS MaxSizeInBytes 
        
        --返回數據庫和屬性名稱的屬性值 *

SELECT DB_NAME() --返回數據庫名稱 *

SELECT INDEX_COL('dbo.school',1,1) --返回索引列名稱 *

SELECT OBJECT_ID('school') --返回對象標識號 *  例如獲取表的標識號

 GO
 ALTER PROCEDURE pro_test
 AS 
     PRINT @@PROCID   --返回當前過程的存儲過程標識符 *    
 GO
 EXECUTE pro_test

 SELECT TYPEPROPERTY('tinyint', 'PRECISION') --返回數據類型的屬性值  當前返回數據類型的精度和位數 *


 /*******************************************
 * 其他函數
 *******************************************/


SELECT APP_NAME() --返回當前會話的應用程序名稱 *

SELECT CAST(123 AS NVARCHAR) --通過表達式將一種數據類型顯式轉換為另外一種數據類型 *

SELECT COALESCE(NULL,NULL,123,NULL) --返回其參數中第一個非NULL表達式 *

SELECT CONVERT(NVARCHAR(20),123) --通過表達式將一種數據類型顯式轉換為另外一種數據類型 *

SELECT CURRENT_USER --返回當前用戶名 *

SELECT DATALENGTH(CONVERT(NVARCHAR(11),55555)) --返回用於表示表達式的字節數 *

PRINT @@ERROR --返回執行的上一個Transact-SQL語句的錯誤號 *

SELECT AVG(ISNULL(id,0)) FROM dbo.school AS s  --ISNULL 將NULL替換為指定的替換值 *

PRINT ISNUMERIC('1223A') --確定表達式是否為有效的數值類型 *

SELECT NULLIF('AA','AA') --如果兩盒指定的表達式等價,則返回null,如果不等價則返回第一個表達式 *

SELECT @@ROWCOUNT --返回受上一語句影響的行數 *

SELECT STATS_DATE(OBJECT_ID('school'),1)  --返回上次更新指定索引的統計信息的日期 *

PRINT SYSTEM_USER  --返回當前會話的系統用戶名(登錄名) *

PRINT @@TRANCOUNT --返回當前連接的活動事務數 *


/*******************************************
 * 安全函數
 *******************************************/


SELECT HAS_DBACCESS('schools')  --指示當前用戶是否有權限訪問指定的數據庫 *

SELECT ORIGINAL_DB_NAME() --返回原始數據庫名稱 *

SELECT SUSER_SID('sa') --返回登錄名的安全標識號 *

SELECT USER --返回用戶的數據庫名稱 *

SELECT USER_ID() --返回用戶數據庫標識號 *

SELECT USER_NAME() --根據給定的標識號,返回用戶的數據庫用戶名 *


 /*******************************************
 * 字符串函數
 *******************************************/


SELECT ASCII('HGFADSA') --返回字符表達式中最左側的字符的ASCII代碼值 *
 
SELECT CHAR(77) --將整數ASCII碼轉換為字符 *
 
SELECT CHARINDEX('AF','DSAFGGASAK',2) --返回字符串中指定表達式的開始位置 *
 
SELECT DIFFERENCE('a','b') --以整數返回兩個字符表達式的SOUNDEX值之差
 
SELECT LEFT('ABCDEFG',5)  --返回字符表達式中最左側指定數目的字符 *
 
SELECT LEN('ABCDEFG') --返回給定字符串表達式的字符數 *
 
SELECT LOWER('HNISADA') --返回將大寫字符轉換為小寫字符的字符表達式 *
 
SELECT LTRIM('    DDD') --返回刪除了前導空格之后的字符表達式 *
 
SELECT NCHAR(77) --返回具有給定整數代碼的Unicode字符 *
 
SELECT PATINDEX('%en_ure%', 'please ensure the door is locked') --返回指定表達式中模式第一次出現的開始位置 類似like *
 
SELECT QUOTENAME('abc()def');  --返回為成為有效的SQL Server分隔標識符而添加的了分隔符的Unicode字符串 結果:[abc()def] *
 
SELECT REPLACE('abcdefg','cd','ab') --用第三個表達式替換第一個表達式中出現的所有的第二個表達式 *
 
SELECT REPLICATE('abc',10) --按指定次數重復字符表達式 *
 
SELECT REVERSE('abcdefg') --返回字符表達式的逆向表達式 *
 
SELECT RIGHT('456abc',4)  --返回字符表達式右側指定數目的字符 *
 
SELECT RTRIM('adfsa  ff  ') --返回截斷了所有尾隨空格之后的字符串表達式 *
 
SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') --返回由四個字符表示得SOUNDEX代碼
 
SELECT SPACE(4) --返回由重復空格組成的字符串 *
 
SELECT STR(456)  --返回從數值表達式轉換而來的字符表達式 *
 
SELECT STUFF('abcdef', 2, 3, 'ijklmn') --刪除指定長度的字符,並在指定的起點處插入另一組字符 *
                                             
SELECT SUBSTRING('MYNAME',3,4) --返回字符表達式、二進制表達式、文本表達式或圖像表達式的一部分 *
 
SELECT UNICODE('iojodsa')  --返回表達式第一個字符的Unicode整數值 *
 
SELECT UPPER('fdsFSA')  --返回將小寫字符轉換為大寫字符的字符表達式 *


 /*******************************************
 * 系統統計函數
 *******************************************/


SELECT @@CONNECTIONS  --返回SQL Server自上次啟動以來嘗試的連接數 *
 
SELECT @@CPU_BUSY --返回SQL Server自上次啟動以來CPU的工作時間(毫秒) *
 
SELECT @@IDLE --返回SQL Server自上次啟動以來的空閑時間(毫秒) *
 
SELECT @@IO_BUSY  --返回SQL Server自上次啟動以來在執行I/O操作上花費的時間(毫秒) *
 
SELECT @@PACK_RECEIVED --返回 SQL Server 自上次啟動后從網絡讀取的輸入數據包數 *
 
SELECT @@PACK_SENT --返回SQL Server自上次啟動以來寫入網絡的輸出數據包數 *
 
SELECT @@PACKET_ERRORS --返回自上次啟動 SQL Server 后在 SQL Server 連接上發生的網絡數據包錯誤數 *
 
SELECT @@TIMETICKS --返回每個時鍾周期的微秒數 *
 
SELECT @@TOTAL_ERRORS --返回 SQL Server 自上次啟動以來發生的磁盤讀/寫錯誤數 *
 
SELECT @@TOTAL_READ --返回SQL Server 自上次啟動以來發生的磁盤讀取次數 *
 
SELECT @@TOTAL_WRITE --返回SQL Server 自上次啟動以來發生的磁盤寫入次數 *


 /*******************************************
 * 文本和圖像函數
 *******************************************/


 ALTER TABLE t1 (c1 int, c2 text);  
 EXEC sp_tableoption 't1', 'text in row', 'on';  
 INSERT INTO t1(c1,c2)VALUES('1', 'This is text.');  
 GO  
 BEGIN TRAN;  
    DECLARE @ptrval VARBINARY(16);  
    SELECT @ptrval = TEXTPTR(c2)  --返回對應於text、ntext或image列的文本指針值
    FROM t1  
    WHERE c1 = 1;  
    READTEXT t1.c2 @ptrval 0 5;  --讀取文本 目標對象為ti.c2 文本指針為 @ptrval 文本讀取開始位置為0 讀取長度為5
 COMMIT; 
 
 SELECT * FROM t1 AS t

 


免責聲明!

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



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