元数据函数
DB_ID
获取数据库唯一标识,是服务器上的唯一标识
语法结构 :DB_ID(['database_name'])
参数说明 :database_name是数据库名称,为可选参数。如果没有指定则返回当前所在数据库的ID
返回值:int类型的数据库标识符
使用:SELECT DB_ID();
DB_NAME
获取当前数据库的名称
语法结构 :DB_NAME(['database_id'])
参数说明 :database_id为可选参数,是数据库的id,可由DB_ID函数获得、如果没有指定则返回当前所在数据库的名称
返回值 :数据库名称
使用 :SELECT DB_NAME();
OBJECT_ID
获取数据库对象标识符,是数据库中的唯一标识
语法结构 :OBJECT_ID('[database_name.[schema_name].|schema_name .]object_name'[,'object_type'])
参数说明:
名称 | 说明 | 是否可选 |
database_name | 数据库名称 | 可选 |
schema_name | 架构名称 | 可选 |
object_name | 对象名称 | 必选 |
object_type | 对象类型 | 可选 |
返回值:int类型的对象标识符
使用:
IF OBJECT_ID(N'dbo.User',N'U') IS NOT NULL
DROP TABLE dbo.User;
GO
OBJECT_NAME
获取数据库对象名称
语法结构 :OBJECT_NAME(object_id)
参数说明 :object_id是数据库对象的id,可用OBJECT_ID获得
返回值 :数据库对象名称
OBJECTPROPERTY
获得指定数据库、指定对象的指定属性值。
语法结构 :OBJECTPROPERTY(id,property)
参数说明:
id表示为指定的数据库、对象的id
property表示要返回的属性
常见的property属性值
属性值 | 说明 | 返回值 |
TableHasTextImage | 表中是否含有text、image数据类型的列 | int 1表示true 0表示false |
TableHasPrimaryKey | 表中是否含有主键 | int 1表示true 0表示false |
TableHasIndex | 表中是否含有索引 | int 1表示true 0表示false |
TableHasForeignKey | 表中是否含有外键 | int 1表示true 0表示false |
SchemaId | 对象的架构Id | int |
OwnerId | 对象所有者 | int |
IsView | 是否是视图 | int 1表示true 0表示false |
IsUserTable | 是否是用户创建的表 | int 1表示true 0表示false |
IsTable | 是否是表 | int 1表示true 0表示false |
IsSystemTable | 是否是系统表 | int 1表示true 0表示false |
IsPrimaryKey | 是否是主键 | int 1表示true 0表示false |
聚合函数
AVG
计算映射集平均值,如果参数值为NULL则这一行会被忽略计算
语法结构 :AVG([all | distinct] expression)
参数说明 :
all:为默认值,标识对所有的数据都计算平均值
distinct:去重,相同值仅作为一次计算
expression: 表达式(列)。表达式内部不允许使用子查询和其他聚合函数。
使用:select ave(age) from student
MIN
计算映射集最小值,可用于numeric、char、varchar或datetime、money或smallmoney列,但不能用于bit列,忽略null值
语法结构 :MIN([all | distinct] expression)
参数说明 :同AVG
使用:select min(avg) from student
MAX
计算映射集中最大值。和MIN函数一样,可用于numeric、char、varchar或datetime、money或smallmoney列,但不能用于bit列,忽略null值
语法结构:MAX([all | distinct] expression)
参数说明:同AVG
使用:select max(age) from student
SUM
用于求和,只能用于数字类型(bit类型除外),忽略null值
语法结构:SUM([all | distinct] expression)
参数说明:同AVG
使用:select sum(grade) from class
COUNT
用于计算满足条件的数据项的个数
语法结构:COUNT([[all | distinct] expression] | *)
参数说明:expression是除text、image或ntext以外任何的表达式,但不允许是聚合函数和子查询
使用:
count(*) 返回所有的列项数,包括含NULL和重复项的列
count(all expression) 返回非NULL值的列的个数
count(distinct expression) 返回唯一非NULL值的列的个数
STDEV
计算标准偏差
语法结构:STDEV([all | distinct] expression)
参数说明:expression必须是一个数值类型的表达式(不包括bit类型),不允许使用聚合函数和子查询,忽略null值
使用:select stdev(age) from student
VAR
计算方差
语法结构:VAR([all | distinct] expression)
参数说明:同STDEV
使用:select var(age) from student
数学函数
ABS
计算绝对值
语法结构:ABS(expression)
参数说明:expression必须是一个数值类型的表达式(bit类型除外)
使用:select abs(-1)
CELLING
获取大于等于最小整数值。俗称天花板函数,尽量往最大的取整。
语法结构:CELLING(expression)
参数说明:同ABS
使用:select celling(15.2) --输出16
FLOOR
获取小于等于最大整数值。与CELLING函数相对,俗称地板函数,尽量往最小的取整
语法结构:FLOOR(expression)
参数说明:同ABS
使用:select floor(15.6) --输出15
ROUND
获取指定长度和精度的数值
语法结构:ROUND(expression,length[, function])
参数说明:
expression 数值表达式
length 舍入的精度。正数-保留小数点后几位;负数保留小数点前几位
function 截断小数。值为tinyint、smallint或int。值省略或为0则进行舍入。如果指定了0以为的值则截断小数
使用:
select round(123.666,0) --124.00
select round(123.66,0,1) --123.00
RAND
返回0到1之间的浮点数
语法结构: RAND([seed])
参数说明:seed是种子值,是一个整数类型(tinyint、smallint、int)的表达式。
使用:select rand()
字符串函数
ASCII
获取指定字符的ASCII编码
语法结构:ASCII(expression)
参数说明:expression是一个char或varchar类型的表达式。
使用:select ascii(‘k’) --107
CHAR
ASCII函数的逆操作,通过ASCII码获得相应的字符
语法结构:CHAR(integer_expression)
参数说明:integer_expression是一个整数类型的表达式
使用:select char(107) --k
Unicode
获取指定字符的Unicode编码
语法结构:Unicode(expression)
参数说明:expression是一个nchar或nvarchar类型的表达式
使用: select unicode(‘k’)
NCHAR
Unicode函数的逆操作,通过Unicode码来获得相应的字符
语法结构:NCHAR(integer_expression)
参数说明:integer_expression是一个整数类型的表达式
使用: select nchar(107)
PatIndex
获取字符串第一次出现的位置,没有匹配到的话则返回0
语法结构:PatIndex(‘%pattern%’,expression)
参数说明:
pattern:可以是一个字符串,也可以使用通配符。如果使用通配符则需要配对
expression:字符表达式
返回值:如果expression数据类型为varchar(max)或nvarchar(max)则为bigint,否则为int
使用:select patindex(‘%llo%’,’hello world!’)
SPACE
生成空格
语法结构:SPACE(integer_expression)
参数说明:integer_expression表示生成几个空格
使用: select space(3)
REPLICATE
按指定的次数重复生成一个字符串
语法结构:REPLICATE(character_expression,integer_expression)
参数说明:
character_expression 要生成的字符串
integer_expression 生成的次数
使用: select replicate(‘hello’,5)
SUBSTRING
对字符串进行截取,索引从1开始
语法结构:SUBSTRING(expression,start,length)
参数说明:
expression 可以是字符串、二进制字符串、文本、图像或包含列的表达式,但不能使用聚合函数的表达式
start 指定子字符串开始位置
length 返回字符的个数,不能为负数
返回值:
如果expression是受支持的字符数据类型,则返回字符数据;如果expression是受支持的binary数据类型,则返回二进制数据
使用: select substring(‘hello’,1,2)
LEN
获取字符串的长度,但不包括右边的空格。
语法结构:LEN(string_expression)
参数说明:要计算长度的字符串
返回值:expression数据类型为varchar(max)、nvarchar(max)或varbinary(max)则为bigint。否则为int
使用: select LEN(‘王尼玛’)
STUFF
在指定的字符串中删除指定长度的字符串,并在起点处插入另外一组字符
语法结构:STUFF(source_character_expression,start,length,destination_character_expression)
参数说明:
source_character_expression 源字符串。可以是常量、变量,也可以是字符列或二进制数据列
start 指定删除和插入的开始位置。如果start或length为负数,则返回空字符串。如果start比源字符串长,则返回空字符串
length 指定要删除的字符个数。如果length比源字符串长,则全部删除
destination_character_expression 要插入的新字符串。可以是常量、变量,也可以是字符列或二级制数据列
使用: select stuff(‘abcdef’,3,2,‘111’) --ab111ef
CHARINDEX
用于在指定的字符串中搜索特定的字符串,并可以指定开始搜索的位置,返回第一次找到目标字符的位置
语法结构:CHARINDEX(expression1,expression2[,start_location])
参数说明:
expression1 要查找的字符串的表达式
expression2 指定搜索的字符串表达式,可以是字符列
start_location 搜索的字符串的搜索位置。如果值为负数或零,则从开头搜索
返回值: 如果expression2的数据类型为varchar(max)、nvarchar(max)或varbinary(max),则为bigint。否则为int
使用: select charindex(‘wc’,’wk wr wc’,2)
QUOTENAME
生成带有分隔符的Unicode字符串
语法结构:QUOTENAME(‘character_string’[, ‘quote_character’])
参数说明:
character_string:Unicode字符串
quote_character:用作分隔符的单字符串,默认的话为“[]”
返回值:nvarchar(258)
使用:
select quotename(‘hello’) --[hello]
select quotename(‘hello’,’|’) --|hello|
STR
用于将浮点数转换为字符串
语法结构:STR(float_expression [,length[,decimal]])
参数说明:
float_expression 浮点数值的表达式
length 总长度。它包括小数点、符号、数字及空格。默认值为10
decimal 小数点后的位数。decimal必须小于或等于16,如果大于16则会截断结果
返回值:char
使用:
select str(123.987) –124 str函数会自动四舍五入
select str(123.987,6) –两空格 +124 因为decimal没有指定,所以自动填充空格
select str(123.987,6,4)--123.99
LEFT
截取左边字符串,效果等同于SUBSTRING(expression,1,length)
语法结构:LEFT(character_expression,integer_expression)
参数说明:
character_expression 字符串或二进制表达式,可以是常量、变量或表达式。
integer_expression 正整数,指定返回的字符数
返回值:varchar或nvarchar
使用:select left(‘wow’,2) --wo
RIGHT
截取右边字符串,效果等同于SUBSTRING(expression,LEN(expression)-length+1,length)
语法结构:RIGHT(character_expression,integer_expression)
参数说明:同LEFT函数
返回值:同LEFT函数
使用: select right(‘wow’,2) –w
LTRIM
用于清除左边空格字符
语法结构:LTRIM(character_expression)
参数说明:character_expression 为字符或二进制数据表达式,可以使常量、变量或数据列
返回值:varchar或nvarchar字符串
使用: select ltrim(‘ 123’)
RTRIM
用于清除右边空格字符
语法结构:RTRIM(character_expression)
参数说明:同LTRIM
返回值:同LTRIM
使用: select rtrim(‘123 ’)
LOWER
将指定字符串全部转换成小写字符
语法结构:LOWER(character_expression)
参数说明:character_expression 为字符或二进制数据表达式,可以使常量、变量或数据列
返回值:varchar或nvarchar字符串
使用: select lower(‘aBc’) --abc
UPPER
将指定字符串全部转换成大写字符
语法结构:UPPER(character_expressiion)
参数说明:同LOWER
返回值:同LOWER
使用:select upper(‘aBc’) –ABC
REVERSE
反转(反序)指定字符串
语法结构:REVERSE(character_expression)
参数说明:character_expression 为字符或二进制数据表达式,可以使常量、变量或数据列
返回值:varchar或nvarchar字符串
使用: select reverse(‘abc’) –cba
DATALENGTH
获取指定字符串的字节数。它不仅适合字符串类型数据,还适合文本(text、ntext)、二进制数据(varbinary、binary)和图像(image)等任意类型的数据。
语法结构:DATALENGTH(expression)
返回值:如果expression数据类型为varchar(max)、nvarchar(max)或varbinary(max)数据类型,则返回bigint。否则返回int
使用:select datalength(‘我’) –2
SOUNDEX
返回一个由四个字符组成的代码,用于评估两个字符串的相似性
语法结构:SOUNDEX(‘character’)
使用:
select soundex(‘abcde’) --A120
select soundex(‘abcdf’) --A122
DIFFERENCE
返回一个整数值,用来表示两个字符表达式的SOUNDEX值之间的差异
语法结构:DIFFERENCE(expression1,expression2)
使用:select difference(‘abc’,’abf’)
REPLACE
在指定的字符串中替换指定的字符
语法结构:REPLACE(string_expression1,string_expression2,string_expression3)
参数说明:
string_expression1 要搜索的字符串表达式。可以是字符或二进制数据值
string_expression2 要查找的字符串。可以是字符或二进制数据值
string_expression3 要替换的字符串。可以是字符或二进制数据值
使用: select replace(‘ab’,’abcdef’,’H’)
日期时间函数
GETDATE
获取当前Sql Server服务器的日期和时间
使用: select getdate()
GETUTCDATE
获取当前Sql Server服务器的UTC时间
使用: select getutcdate()
YEAR
获取日期的年份信息
语法结构:YEAR(date)
参数说明:date可以为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式
使用:select year(‘2012’)
MONTH
获取日期的月份信息
语法结构:MONTH(date)
参数说明:同YEAR
使用:select month(‘2012-05’)
DAY
获取日期的天份信息
语法结构:DAY(date)
参数说明:同YEAR
使用:select day(‘2012-05-20’)
DATEPART
返回指定日期时间的指定部分值
语法结构:DATEPART(datepart,date)
参数说明:
datepart 指定日期时间输出格式代码
说明 | 取值 |
返回年度信息 | Year、YYYY、YY |
返回月份信息 | Month、MM、M |
返回日期信息 | Day、DD、D |
返回周信息 | Week、WK、WW |
返回每周星期几信息 | WeekDay、DW |
返回季度信息 | Quarter、QQ、Q |
返回一年中第几天的信息 | DayOfYear、DY、Y |
返回小时信息 | Hour、HH |
返回分钟信息 | Minute、MI、N |
返回秒信息 | Second、SS、S |
返回毫秒信息 | MillSecond、MS |
返回值:int类型日期时间格式
使用: select datepart(yy,getdate())
DATENAME
返回指定日期时间格式的字符串,和DATEPART函数一样,只不过返回值为字符类型
使用:select datename(yy,getdate())
DATEADD
将某个日期加上一个指定整数值,得到一个新的datetime类型的数据
语法结构:DATEADD(datepart,numerical,date)
参数说明:
numerical 要相加的值,必须是整数,如果是小数则保留整数
date 为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串
datepart 日期时间输出格式代码
使用:select dateadd(yyyy,’2012-05-06’,’2013-05-06’)
DATEDIFF
将两个日期按照特定的时间格式相减,得到一个新的datetime类型的数据
语法结构:DATEDIFF(datepart,startdate,enddate)
参数说明:
startdate 为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串
enddate 为time、date、smalldatetime、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串
datepart 日期时间输出格式代码
使用:select datediff(yyyy,’2012-05-06’,’2013-05-06’)
类型转换函数
CAST 和CONVERT它们的功能是相同的,只是语法不同
CAST
语法结构:CAST(expression as date_type)
参数说明:expression 要转换的表达式
使用:select cast(‘123’ as int)
CONVERT
语法结构:CONVERT(data_type(length),expression,style)
参数说明:
data_type(length) 数据类型
expression 要转换的值
style 输出的格式
Style ID Style 格式
100 或者 0 mon dd yyyy hh:miAM (或者 PM)
101 mm/dd/yy
102 yy.mm.dd
103 dd/mm/yy
104 dd.mm.yy
105 dd-mm-yy
106 dd mon yy
107 Mon dd, yy
108 hh:mm:ss
109 或者 9 mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
110 mm-dd-yy
111 yy/mm/dd
112 yymmdd
113 或者 13 dd mon yyyy hh:mm:ss:mmm(24h)
114 hh:mi:ss:mmm(24h)
120 或者 20 yyyy-mm-dd hh:mi:ss(24h)
121 或者 21 yyyy-mm-dd hh:mi:ss.mmm(24h)
126 yyyy-mm-ddThh:mm:ss.mmm(没有空格)
130 dd mon yyyy hh:mi:ss:mmmAM
131 dd/mm/yy hh:mi:ss:mmmAM
使用:select convert(int,123)