SQLSERVER 学习笔记(二)SQL函数

ABS() 求绝对值

select ABS(-3)

CEILING() 舍入到最大整数

3.33 舍入到

-3.33 舍入到-3

select CEILING(-3.33)

FLOOR() 舍入到最小整数

3.33 -> 3

-3.33 -> -4

select FLOOR(-3.33)

ROUND() 四舍五入 两个参数,第一个是对象,第二个是精度

3.33 -> 3

3.66 -> 4

select ROUND(3.66,0);    ->4

select ROUND(3.1415926,3); ->3.142

LEN() 计算字符串长度

select LEN('HELLO');

select FName,LEN(FName) from T_Employ;

注意: 字符串NULL(不知道)的长度也为不知道(NULL)

LOWER()转小写

UPPER() 转大写

空格处理函数

LTRIM()  去掉左空格

RTRIM()  去掉右空格

LTRIM(RTRIM()); 两边空格都去掉

select LTRIM('   bb     '),RTRIM('   bb     ');

select LTRIM(RTRIM('     bb       ')),LEN(LTRIM(RTRIM('     bb       ')))

字符串截断函数

SUBSTRING(EXPRESS,STRAT,LENTH)  

显示FName中从第二个开始长度为的子字符串

select FName,SUBSTRING(FName,2,2) from T_Employ;

日期函数

GETDATE() 取得当前日期

DATEADD(datepart,number,date) 计算增加以后的日期

date为待计算的日期number为增量

datepart的取法

year yy yyyy 年份

quarter qq q 季度

month mm m 月份

dayofyear dy,y 年度第几天

day dd d 

week wk ww 当年第几周

hour hh 小时

minute mi n 

second ss s 

millonsecond ms 毫秒

 select DATEADD(month,-8,'121212');  //减个月

 select DATEADD(DAY,-3,GETDATE());// 减天

 select DATEADD(HH,1,GETDATE());//加小时

 

 

 DATEDIFF(datepart,start,end)  计算两个日期的差额(end - start)

 select DATEDIFF(HH,GETDATE(),DATEADD(HH,1,GETDATE())) 计算多少个小时

 

 要求算出员工入职年数

 select FName,FInDate,DATEDIFF(YEAR,FInDate,GETDATE()) as '入职年数' from T_Employ; 计算多少年

 按年限分组并统计每组人数

 select COUNT(*) as '统计人数' ,DATEDIFF(YEAR,FInDate,GETDATE())as '入职年数' 

 from T_Employ group by DATEDIFF(YEAR,FInDate,GETDATE());

 

 DATEPART(datepart,date) 返回一个日期的特定部分

 select DATEPART(SS,getdate());

 根据入职年份进行分组

 select COUNT(*),DATEPART(YEAR,FInDate)

  from T_Employ 

  group by DATEPART(YEAR,FInDate);

类型转换函数

cast(expression as date_type)

convert(date_type,expression)

select CAST('123' as int),CAST('2008-08-08' as datetime),

CONVERT(datetime,'2009-09-09'),CONVERT(varchar(50),123);

RIGHT(expression,n) 取得表达式的后n

select RIGHT(FIdCardNumber,3) from T_TempEmployee; //取得后三位 (得到的是字符串)

select CAST(RIGHT(FIdCardNumber,3) as INTEGER) from T_TempEmployee //取得后三位并转换为整数形式

select CAST(RIGHT(FIdCardNumber,3) as INTEGER)+from T_TempEmployee 

select convert(INT,RIGHT(FIdCardNumber,3))/from T_TempEmployee;

select DATEPART(YEAR,CAST('2013-04-19' as datetime));

空值处理函数

ISNULL(expression1expression2) 如果expression1NULL则返回expression1,

select ISNULL(FName,'佚名') from T_Employ;

case函数用法

case i

when 1 then 'aaa' // aaa 是函数的返回值

when 2 then 'bbb' //bbb

else 'ccc'

end

create table T_Customer(FName varchar(20),FLevel int);

insert into T_Customer(FName,FLevel) values('tom',1),('jerry',2),('lucy',3);

select FName from T_Customer;

select FName ,

(

case FLevel

when 1 then '普通客户'

when 2 then '会员'

when 3 then 'VIP会员'

else '未知客户类型'

end

) as '客户类型'

from T_Customer;

范围值的判断 这时case后为空

select FName,

(

case 

when FSalary<2000 then '低收入'

when FSalary>=2000 and FSalary<=5000 then '中收入'

else '高收入'

end

)as 收入水平

from T_Employ;

你可能感兴趣的:(SQLSERVER 学习笔记(二)SQL函数)