SQL Server 常用函数!!!

 1、Ltrim、Rtrim去除空格函数: MS SQL Server中没有Trim函数,只有Ltrim(去除左侧空格)和Rtrim(去除右侧空格)函数

使用语法: Ltrim(字段)  、Rtrim(字段)

等效Trim方法(Oracle):

 使用举例:

 select  Ltrim(Rtrim('    Server课程  '))

   返回:Server课程

 

2、Convert 函数 与 CAST 函数:用于SQL的数据类型转换,将一种数据类型的表达式转换为另一种数据类型的表达式

使用语法: Convert( 字段数据类型, 表字段或表达式)  

 使用举例:

TEST 字段为 int 类型,那么可用如下函数转为 varchar 的类型  

SELECT convert(varchar,DATEPART(YEAR,GETDATE()))+'年'

返回:2020年

CAST( 表字段或表达式  AS  字段数据类型)

SELECT cast(DATEPART(YEAR,GETDATE()) as varchar)+'年'
返回:2020年

 

3.row_number()函数:A.利用分组排序来自动产生行号,简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY 字段 DESC) 是先把【字段}列降序,再为降序以后的每条xlh记录返回一个序号

                                                row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

*类似函数——  dense_RANK() over(order by 字段)  dense_rank函数根据ORDER BY 排序后出现相同数据时,将排号相同,后面再继续生成序号接着连续的

*类似函数——  ntile(分组数值) over(order by 字段)  ntile 函数是根据设置的分组数,来排序号,例如分组数值是2 ,则每两个为一组序号依次生成序号接着连续的

使用语法: row_number()over(partition by 字段 order by 字段)

使用举例:

create table employee (deptid int ,salary decimal(10,2),cood varchar(20));
insert into employee values(10,5500.00,'鞋');
insert into employee values(10,4500.00,'衣服');
insert into employee values(20,4500.00,'衣服');
insert into employee values(40,14500.00,'帽子');
insert into employee values(40,55500.00,'外套');
insert into employee values(50,7500.00,'裤子');
insert into employee values(150,7500.00,'裤子');

SELECT T.*,ROW_NUMBER() OVER(partition by salary ORDER BY salary desc) rum from employee t

                                         B. Row_Number() OVER 去重详解

SELECT *
FROM (SELECT t.*,
ROW_NUMBER() OVER(PARTITION BY salary ORDER BY deptid DESC) ROW_NUM
FROM employee t
)a
WHERE ROW_NUM = 1;

如果这张表中有两条除deptid外完全一样的记录,而现在我们只需要一条,那么就可以用这种方法去重,通过ROW_NUMBER() OVER函数通过RECVTIME排序,下边令ROW_NUM = 1就可以找到一条记录了,这样可以去冗余。     

 

5.CHARINDEX()与 PATINDEX()函数:寻找一个指定的字段在另一个字符串中的起始位置,都返回指定模式的开始位置。PATINDEX 可使用通配符,不能使用多内容组合,而 CHARINDEX 不可以使用通配符,可以多内容组合

使用语法:CHARINDEX(字段,字符串,起始位置)--起始位置不写默认为0   

                  PATINDEX(字符串,字段)

使用举例:

select *from (
select =CHARINDEX(cood,'帽子'+'外套'+'裤子') as demo from employee emp
) t where t.demo>0

返回:1

           3

          5

          5

*字段的内容依次从左到右查找在字符串组合 ‘'帽子外套裤子'’ 里面的起始位置

select *from (
select emp.*, patindex('%外%',cood) as demo from employee emp
) t where t.demo>0

返回:1

 使用举例:

create table test(roon varchar(100))
insert into test
select '2栋6单元404室' union
select '3栋2单元2005室' union
select '1栋3单元103室' union
select '2栋3单元1806室' union
select '15栋2单元507室'

select * from test

输出:

 

 *取不定长不同位置的字符串

select room_stand=substring(roon,charindex('元',roon)+1,charindex('室',roon)-charindex('元',roon)-1)

from test where roon like '%单元%室%'

输出:

 

对字符串进行复杂的处理:调用多个函数

【函数介绍】
- CHARINDEX(expressionToFind , expressionToSearch):此函数会在第二个字符表达式中搜索一个字符表达式,这将返回第一个表达式(如果发现存在)的开始位置。需要注意的是:它返回的起始位置是从1开始的,而不是从0开始的。

可以使用函数CHARINDEX()确定指定符号的位置

SELECT CHARINDEX('-','AB-C') ;/*返回第一个符号“-”所在的位置*/
SELECT CHARINDEX('-','AB-CDEF-G',CHARINDEX('-','AB-CDEF-G')+1) ;/*返回第二个符号“-”所在的位置:从第一个符号往后找*/

按照指定符号截取文本,假设指定符号为“-”,截取字符串第一个符号前的所有内容。

SELECT SUBSTRING('AB-C',1,CHARINDEX('-','AB-C')) ;/*从第1位开始,取到第一个符号“-”个为止,包含符号“-”*/
SELECT SUBSTRING('AB-C',1,CHARINDEX('-','AB-C')-1) ;/*从第1位开始,取到第一个符号“-”个为止,不包含符号“-”*/
SELECT SUBSTRING('AB-CDEF-G',1,CHARINDEX('-','AB-CDEF-G',CHARINDEX('-','AB-CDEF-G')+1)-1) ;/*从第1位开始,取到第二个符号“-”个为止,不包含符号“-”*/

 

6.DATALENGTH()与 LEN()函数 :DATALENGTH返回用来表示任何表达式的字节数,LEN返回传递给它的字符串长度    (一个中文字等于两个字符串,一个长度)

使用语法:DATALENGTH(字段或字符串)

                  LEN(字段或字符串)

使用举例:

SELECT DATALENGTH('SQL Server课程')

返回:14

select len('SQL Server课程')

返回:12

 

7.UPPER()与LOWER()函数:UPPER 把传递给它的字符串转换为大写,LOWER 把传递给它的字符串转换为小写

使用语法:UPPER(字段或字符串)

                  LOWER(字段或字符串)

使用举例:

select UPPER('server课程')

返回:SERVER课程

select LOWER('SERVER课程')

返回:server课程

 

8. LEFT()与 RIGHT()函数:LEFT 从字符串左边开始截取到指定数值位置的字符,RIGHT从字符串右边截取到指定数值位置的字符

使用语法:LEFT(字段或字符串,数值)

                 RIGHT(字段或字符串,数值)

使用举例:

SELECT LEFT('SQL SERVER课程',5)

返回:SQL S
SELECT RIGHT('SQL SERVER课程',5)

返回:VER课程

 

9. SUBSTRING()函数:从字符串开始数值开始截取到结束数值的字符

使用语法:SUBSTRING(字段或字符串,开始数值,结束数值)

 使用举例:

SELECT SUBSTRING('SERVER课程表',7,2)

返回:课程

 

10. REPLACE()函数:查找字段或表达式里面存在的内容替换为另一个指定字符

使用语法:REPLACE(字段或字符串,存在字符,替换字符)

使用举例:

SELECT REPLACE('SQL Server课程','课程','数据库')

返回:SQL Server数据库

 

11. STUFF()函数:在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串

使用语法:STUFF(字段或字符串,开始数值,结束数值,插入字符串)

使用举例:

SELECT STUFF('MySQL课程',6,3,'安装教程')

返回:MySQL安装教程

 

13.  SPACE()函数:返回由重复的空格组成的字符串

使用语法: SPACE(空格数值)

使用举例:

SELECT '下午'+SPACE(10)+'server课程'

返回:下午          server课程

 

14. REPLICATE()函数:返回多次复制后的字符表达式

使用语法:REPLICATE(字段或字符串,复制次数数值)

使用举例:

SELECT REPLICATE(’+’,3)
返回:+++

 

15. STR()函数:返回由数字数据转换来的字符数据

使用语法:STR(数字类型字段或者数值数据,转换字符串长度数值,保留小数位数数值) --两个数值参数不填写即默认四舍五入保留整数

*转换规则:a.先看整数部分是否满足转换长度,若转换长度值小于整数长度返回“**”,

                   b.若转换长度值大于整数长度(小数点算一位),再看小数点后位数长度补了多少位,此时[ 保留小数位数数值]起控制小数点位数作用

                    c.小数部分能按要求转换后仍不足转换长度,默认会在左侧补空格以达到转换长度*

使用举例:

SELECT STR(123.746381)

返回:124

a. SELECT STR(123.7487,2,3)

返回:**

b.SELECT STR(123.7487,6,1)

返回: 123.7

   SELECT STR(123.74874565,8,3) --8 代表转换到 123.7487 位数,3代表 保留小数位数数值] 可填写4以下的数值起是保留小数点后位数的作用,但因转换的长度为8位,返回内容只显示7位,则在前面有空格补了一位,如下 c. 执行结果可看出

返回:  123.749

c.select replace(STR(123.74874565,8,3),' ','0')

返回:0123.749

 

16. GetDate() 函数 :取得当前的系统的时间和日期

使用举例:

SELECT GETDATE() 

返回:2020-11-25 10:33:51.800

select convert(varchar(4),GetDate(),120)+'0101' --varchar 参数的数值决定了截取日期时间的位数,120 是样式参数,详见CONVERT()函数;

返回:20200101

SELECT convert(varchar,DATEPART(YEAR,GETDATE()))+'年'+convert(varchar,DATEPART(MONTH,GETDATE()))+'月'+cast(DATEPART(DAY,GETDATE()) as varchar)+'日'

返回:2020年11月25日

 

17. DateDiff() 函数  :返回“开始日期”与“结束日期”之间的差值(如:年、天数等)。

返回值类型: DateDiff() 函数返回值类型为:Long(长整型),范围从 -2,147,483,648 到 2,147,483,647。

使用语法:  DateDiff(参数 , 开始日期 , 结束日期)

参数取值: 

 

说明 

参数写法 

参数简写 

最大 

年 

Year 

yy 

  

季度 

Quarter 

  

月 

Month 

  

周 

Week 

wk 

  

日 

Day 

  

小时 

Hour 

hh 

  

分钟 

Minute 

mi 

  

秒 

Second 

68年 

毫秒 

Millisecond 

ms 

24天20小时31分23.648秒 

 

使用举例:

SELECT DateDiff(ms,'2020-1-1 20:31:23','2020-1-2 20:31:23') --表示计算从'2020-1-1 20:31:23'的时间到'2020-1-2 20:31:23'总共过了多少毫秒

返回:86400000(毫秒)

SELECT DateDiff(DAY,'2020-11-1','2020-11-22')

返回:21(日)  

SELECT convert(varchar(4),GetDate(),120)+'年已经过了'+convert(varchar,DateDiff(DAY,'2020-1-1',GetDate()))+'天'

返回:2020年已经过了329天

 

18. DateAdd() 函数  :用于在指定日期增加(或减去)参数设定的间隔。

语法: DateAdd(参数 , 加(减)间隔 , 指定日期) --加为正数,减为负数

参数取值:  

 

说明 

参数写法 

参数简写 

年 

Year 

yy 

季度 

Quarter 

月 

Month 

周 

Week 

wk 

日 

Day 

小时 

Hour 

hh 

分钟 

Minute 

mi 

秒 

Second 

毫秒 

Millisecond 

ms 

使用举例:

SELECT DateAdd(day,-5,'2020-01-10')

返回:2020-01-05 00:00:00.000
SELECT DateAdd(day,5,'2020-01-10')

返回:2020-01-15 00:00:00.000
select CONVERT(varchar(10),DateAdd(day,-5,'2020-01-10'),120)

返回:2020-01-05

 

 

19. Convert() 函数 :作为日期函数时,用来将日期转换为指定样式的新数据类型。

语法: Convert(数据类型(长度) , 需转换日期 , 样式参数)

常用参数取值:  

 

样式参数 

样式说明 

长度 

101 

 mm/dd/yyyy 

10 

110 

 mm-dd-yyyy 

10 

103 

 dd/mm/yyyy 

10 

105 

 dd-mm-yyyy 

10 

111 

 yyyy/mm/dd 

10 

112 

 yyyymmdd 

108 

 hh:mm:ss 

114 

 hh:mm:ss:mmm 

12 

120 

 yyyy-mm-dd hh:mm:ss 

19 

121 

 yyyy-mm-dd hh:mm:ss.mmm 

23 

 

使用举例:

SELECT Convert(VarChar(10),'2020-01-02 20:31:23',120)

返回:2020-01-02

SELECT Convert(VarChar(8),GetDate(),112) 

 返回:20200102

 

20. DatePart() 函数 :用来返回日期(时间)参数指定的部份,如年、月、日、时、分、秒等。

语法: DatePart(参数 , 日期)

参数取值: 

说明 

参数写法 

参数简写 

年 

Year 

yy 

季度 

Quarter 

月 

Month 

周 

Week 

wk 

日 

Day 

小时 

Hour 

hh 

分钟 

Minute 

mi 

秒 

Second 

毫秒 

Millisecond 

ms 


使用举例:
SELECT '当前系统时间为'+cast(DatePart(HH,GetDate()) as varchar)+'时'+cast(DatePart(MI,GetDate()) as varchar)+'分'+cast(DatePart(S,GetDate()) as varchar)+'秒'
返回:当前系统时间为11时44分37秒

 

21. NULLIF()函数:如果两个指定的字段或表达式相等,则返回空值;如果两个指定的字段或表达式不相等,则返回第一个字段或表达式的内容

使用语法: NULLIF(字段或表达式,字段或表达式)

使用举例:

(存储过程如下:)

ALTER PROCEDURE A

AS
BEGIN
DECLARE @I VARCHAR(50)
IF (SELECT NULLIF('字段1','字段2') AS PING ) IS NULL
BEGIN
SET @I='PING'
PRINT (@I+'字段1与字段2的数据相同')
END
ELSE
PRINT ('字段1与字段2的数据不相同')
END

 (执行存储过程: )

EXEC A;

返回:字段1与字段2的数据不相同

 

22. ISNULL()函数:使用指定的替换值替换NULL空值

使用语法:ISNUL:(字段或表达式,替换的值

使用举例:

SELECT ISNULL((NULLIF('SQL2','SQL2')),0) 

返回:0

 

23.内部合计函数

1)COUNT(*) 返回行数
2)COUNT(DISTINCT 字段)返回指定列中唯一值的个数
3)SUM(字段)返回指定列或表达式的数值和;
4)SUM(DISTINCT 字段) 返回指定列中唯一值的和
5)AVG(字段)返回指定列或表达式中的数值平均值
6)AVG(DISTINCT 字段) 返回指定列中唯一值的平均值
7)MIN(字段)返回指定列或表达式中的数值最小值
8)MAX(字段)返回指定列或表达式中的数值最大值
9)RANGE(COLNAME) 返回指定列的最大值与最小值之差 = MAX(COLNAME)-MIN(COLNAME)
10)ABS(字段) 返回取绝对值
11)SIGN(字段) 返回对于正数返回+1,对于负数返回-1,对于0则返回0

 

posted @ 2020-12-22 17:16  小柒仔  阅读(542)  评论(0编辑  收藏  举报