首页 > 技术文章 > SQL Server 2008 R2 常用系统函数学习

GaoAnLee 2018-01-13 09:34 原文

/*******************************************
 * 聚合函数
 *******************************************/

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

 

推荐阅读