SQL Server基本函数

喜夏-厌秋 提交于 2020-01-01 13:34:24

1. 字符串函数

  1.1 datalength( char_expr ) ,返回表达式的字节数,不包含尾随空格

  返回类型:如果 expression 的数据类型为 varchar(max)、nvarchar(max) 或 varbinary(max) 数据类型,则返回 bigint;否则返回 int。null的datalength的结果是null.

  1.2 len( char_expr ),返回表达式字符数,不包含尾随空格

  1.3 substring( char_expr, start, length ),在expression中取start位置开始length长度的字符串。字符串下标从1开始。

  1.4 right( char_expr,int_expr ),返回表达式从起始位置(从右端开始)到指定字符位置(从右端开始计数)的部分;对比区分left()

  1.5 isnull(check_expr,replace_value),如果check_expr为空,返回replaced的值,否则返回check_expr

  1.6 upper(char_expr) 转为大写;反之lower(char_expr)转为小写 

  1.7 space(int_expr) 生成int_expr个空格 

  1.8 replicate(char_expr,int_expr)复制字符串int_expr次 

  1.9 reverse(char_expr) 反转字符串 

  1.10 stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从start开始的length个字符用char_expr2代替。start为负或超出char_expr1长度,则返回空字符串;length为负,返回空字符串 

  1.11 ltrim(char_expr)取掉左侧空格;反之rtrim(char_expr)  取掉右侧空格

  1.12 ascii(char) 、char(ascii) 两函数对应,取ascii码,根据 ascii 码取字符  

  1.13 charindex(char_expr1,char_expr2[,start_location]),在char_expr2中找char_expr1的起始位置,如果没有给定start_location、或者给定值为负数或零,那么搜索将会开始于char_expr2的起始位置。

  1.14 patindex("%pattern%",char_expr) 返回指定模式的起始位置,否则为0;pattern为一个文字字符串,可以使用通配符;但是pattern前后必须使用字符'%'(查找第一个或最后一个字符时除外)。示例:搜索其名称包含单词"apple"的产品的列表:select productName,patindex('%apple%',productName) from products

2. 数学函数

  2.1 abs(numeric_expr) 求绝对值 

  2.2 ceiling(numeric_expr) 取大于等于指定值的最小整数 

  2.3 exp(float_expr) 取指数

  2.4 floor(numeric_expr) 小于等于指定值得最大整数 

  2.5 pi() 3.1415926......... 

  2.6 power(numeric_expr,power) 返回power次方

  2.7 rand([int_expr]) 随机数产生器

  2.8 round(numeric_expr,int_expr) 按int_expr规定的精度四舍五入 

  2.9 sign(int_expr) 根据正数,0,负数,,返回+1,0,-1 

  2.10 sqrt(float_expr) 平方根

  2.11 isnumeric(expr),如果输入表达式的计算值为有效的整数、浮点数、money或decimal类型时,返回1(指示可将expr至少转换为上述数值类型中的一种。),否则返回0。

3. 日期函数

  3.1 getdate(),返回当前日期

  3.2 datename(datepart, date_expr),返回指定日期指定日期部分的字符串

  3.3 datepart(datepart, date_expr),返回指定日期指定日期部分的整数

  3.4 datediff(datepart, startdate, enddate),日期差;提前五分钟提醒功能:select * from tbName where datediff('minute',col_date,getdate())>5

  3.5 dateadd(datepart, number, date_expr),返回当前日期加上number之后的日期

  3.6 convert(),可以日期转换

  3.7 year(date_expr),获取年份;month()、day()

  说明,上面函数中datepart的 写法,取值,意义 如下(写year、month、day等也是可以的):

   yy          1753-9999  年份

   mm    1-12    月

   dy      1-366      日

   dd    1-31    日

   wk    1-54    周

   dw      1-7     周几 

   hh     0-23    小时

   mi     0-59      分钟

   ss       0-59      秒

   ms      0-999    毫秒

   qq     1-4    刻

4.聚合函数

  4.1 avg(),返回一组数值中所有非空数值的平均值

  4.2 count(),返回一个列内所有非空值的个数。count(*)会忽略null值

  4.3 min(),返回一个列范围内的最小非空值;max()与之相反。这两个函数可以用于大多数的数据类型,返回的值根据对不同数据类型的排序规则而定。如对于字符类型的值,结果以每个字符的ASCII值为顺序从左到右排序

  4.4 sum(),返回一个列范围内所有非空值的总和

5. 系统函数

  5.1 suser_name() 用户登录名  
  5.2 user_name() 用户在数据库中的名字  
  5.3 user 用户在数据库中的名字  
  5.4 show_role() 对当前用户起作用的规则  
  5.5 db_name() 数据库名  
  5.6 object_name(obj_id) 数据库对象名  
  5.7 col_name(obj_id,col_id) 列名  
  5.8 col_length(objname,colname) 列长度  
  5.9 valid_name(char_expr) 是否是有效标识符

6. 类型转换函数

  6.1 cast()

  6.2 convert()

  6.3 str(float_expr [,length [,decimal] ] );返回由数字数据转换来的字符数据。length,总长度,包括小数点、符号、数字以及空格(默认值为10);decimal,小数点后的位数,decimal必须小于或等于16。超出则截断,只保留16位。

print str(12,3,0)   --'12',length大于表达式的长度
print str(123,3,0)  --'123',length等于表达式的长度
print str(1234,3,0) --'***',length小于表达式的长度
print str('13',2,0) --'13',表达式为字符串类型也可以执行该函数 ★
print str(123.456)  --'       123',默认长度为10,只保留整数部分

  6.4 char(int_expr);将int ASCII代码转换为字符;int_expr 介于0-255之间的整数,否则返回null值

char(9)    --制表符
char(10)  --换行符
char(13)  --回车符
--使用char(13)在不同的行上输出姓名、电子邮件地址和电话号码,并以文本方式返回结果
select username,+char(13)+EmailAddress+char(13)+Phone
from tb_user where id=1--结果如下:username------------------------  -------------------------张三123456789@163.com15981867756

 

7.其他标量函数

  标量函数只对一个数值进行操作,并返回单个数值,标量函数分为以下几类:

系统函数、日期/时间函数、字符串函数、数学函数、图像和文本函数、安全函数、游标函数、数据元函数;

select '当前数据库名称'=db_name(),
       '当前数据库标识号'=db_id()

 

 

8. 嵌套函数(将一个函数的返回值传递给另一个函数,这称为嵌套函数调用,如下:)

  select convert(varchar(20),getdate(),101)

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!