学习SQLServer常用函数

  • SQLServer常用函数(上篇)
  • 1.数据类型转换函数
  • 1.1 CAST函数
  • 1.2 CONVERT函数
  • 2.日期函数
  • 2.1 GETDATE()函数
  • 2.2 day()、month()、year()函数 | | DATEPART ()
  • 2.3 DATEADD()函数
  • 2.4 DATEDIFF()函数
  • 2.5 DATENAME()函数
  • 3.字符串比较函数
  • 3.1 CHARINDEX()函数
  • 3.2 PATINDEX()函数
  • 4.字符串操作函数
  • 4.1 STUFF()函数1
  • 4.2 STUFF()函数2
  • 4.3 REVERSE())函数
  • 4.4 TRIM()函数
  • 5.对结果集的操作
  • 5.1 UNION和UNION ALL
  • 5.2 EXCEPT
  • 5.3 INTERSECT


SQLServer常用函数(上篇)

包含的常用命令有:数据类型转换函数、日期函数、字符串比较函数、字符串操作函数
扩展链接: 常用命令来源

1.数据类型转换函数

1.1 CAST函数

CAST函数语法格式:CAST(expression AS data_type)
expression:值
data_type:需要转成的类型
例子:
-- 1.转换成int
	SELECT CAST('123.96' AS int);   结果:报错
-- 2.转换成decimal
--  精度与小数位数分别为9 与2
	SELECT CAST('12.5' AS decimal(9,2))  结果:12.50
--  精度和小数位数的默认值分别是18与0
	SELECT CAST('12.5' AS decimal)  结果:12   
-- 3.转换成date
	SELECT CAST('2020-04-24' AS DATE);

1.2 CONVERT函数

CONVERT函数语法格式:CONVERT(data_type(length),data_to_be_converted [,style])
data_type:需要转换成什么类型
data_to_be_converted:需要转换的内容
[style]:格式
例子:
-- 1.2023-03-21 16:13:27.150
	select CONVERT(varchar(100), GETDATE(), 21);  
-- 2. 条件:dateParam1 >= dateParam2
   ...
   where
   CONVERT(date, #{dateParam1}) <![CDATA[>=]]>  CONVERT(date,#{dateParam2})
-- 3. param1*param2/10000 
	convert(decimal(18,4),(convert(decimal(18,4),#{param1}) * convert(decimal(18,4),#{param2}))/10000)

扩展链接:日期类型转换成字符串类型的Style格式

2.日期函数

2.1 GETDATE()函数

以DATETIME 的缺省格式返回系统当前的日期和时间

2.2 day()、month()、year()函数 | | DATEPART ()

day(date_expression)、month(date_expression)、year(date_expression)函数
分别返回date_expression中的日期值、月份值、年份值。
也可以使用DATEPART (datepart,date):
DATEPART (dd,date),DATEPART (mm,date),DATEPART (yy,date)

2.3 DATEADD()函数

DATEADD函数语法格式:DATEADD(datepart,number,date)
datepart:需要改变的部分,需要参考下面链接的格式
number:实现日期时间加、减的数量,一般是整数
date:日期或者日期字符串
-- 1.减一天  2023-09-02 00:00:00.000
	SELECT DATEADD(dd,-1,'2023-09-03')
-- 2.加一月 2023-10-03 00:00:00.000
	SELECT DATEADD(month,1,'2023-09-03')

扩展链接:DATEADD()函数具体使用

2.4 DATEDIFF()函数

DATEDIFF()函数语法格式:DATEDIFF(date1,date2)
date1/date2:需要对比的日期
结果:date1-date2
补充:TIMESTAMPDIFF函数可精确到每个单位的比较

2.5 DATENAME()函数

DATENAME()函数语法格式:DATENAME ( datepart , date )
datepart :需要获取的部分
date:日期

扩展链接:datepart部分链接

3.字符串比较函数

3.1 CHARINDEX()函数

CHARINDEX()函数语法格式:CHARINDEX ( substring, string[ , start_location ] )
substring:要查找的子字符串
string:父字符串
start_location:指定从父字符串开始查找的位置,默认位置从1开始
结果:找不到返回0,找得到返回具体的位置

3.2 PATINDEX()函数

作用:在字符串中精确/模糊查找字符串
语法格式:PATINDEX ( pattern , string)
pattern :可以是以下几种情况 ‘pattern’、'pattern%'、'%pattern' 、 '%pattern%' 
string:需要查找的字符串
-- 1. '%pattern%' -->  结果为5
	select patindex('%abb%','abcaabbeeabb')
	
-- 2.'%pattern' --> 结果分别为 10 和 0
	select patindex('%abb','abcaabbeeabb') 
	select patindex('%abb','abcaabbeeabbr')
	
-- 3.'pattern%' --> 结果分别为 1 和 0
	selectpatindex('abb%','abbcaabbeeabb')
	selectpatindex('abb%','arbbcaabbeeabb')
	
-- 4. ‘pattern’ --> 结果分别为 1 和 0
	selectpatindex('abb','abb')
	selectpatindex('abb','abbr')

扩展链接:PATINDEX 函数参考来源

4.字符串操作函数

4.1 STUFF()函数1

作用:在指定字符串中插入字符串
STUFF()函数1语法格式:STUFF ( expression1 , start , length , expression2 )
expression1 :源字符串
start :开始删减的位置
length :需要删减的长度
expression2 :需要插入的字符串
注意:
1.start 和length 为负数,返回空串
2.start 比expression1 长,返回空串
3.length 比expression1 长,就替换到最后一个位置
SELECT STUFF('abcdef', 2, 3, 'HELLO')
--------- 
aHELLOef

4.2 STUFF()函数2

作用:将多个字符串记录拼接成一条记录
STUFF()函数2语法格式:STUFF ( ( string_content  FOR XML PATH('')),1,1,' ')
string_content  :包括需要拼接的符号,目标字段不能取别名
stuff  
	((select ‘,’ + name from table_1 FOR XML PATH('')),1,1,'')
-- name的三条记录分别分AA BB CC
-- 结果:AA,BB,CC

4.3 REVERSE())函数

作用:将目标字符串字符进行反转
REVERSE() 函数  语法格式:REVERSE(expression)

4.4 TRIM()函数

作用:将目标字符串左右空格去除

5.对结果集的操作

5.1 UNION和UNION ALL

作用:将两个查询的结果集联合在一起。
条件:查询的列数、字段类型需要一致。
注意:1.以第一个结果集的列名作为联合后结果集的列名;
		   2.在最后一个结果集/查询中使用排序就行;
		   3.可以同时联合多个结果集。
union:对结果进行去重,并且默认规则排序。
union all:对两个结果集全部查询展示,不做处理。

5.2 EXCEPT

作用:处理获得,在第一个集合中存在,但是不存在于第二个集合中的数据。
条件:两个结果集的列名和数量必须一致才能排除。
select name,age from A    ==> [{张三,24},{李四,25},{王五,26}]
select name,age from B    ==> [{张三,24},{李四,25}]
select name,age from A 
EXCEPT
select name,age from B
--------- 
结果:{王五,26}

5.3 INTERSECT

作用:处理获得两个结果集的交集。
条件:两个结果集的列名和数量必须一致才能获取交集。
注意:同一个查询中,INTERSECT优先级高于EXCEPT
select name,age from A    ==> [{张三,24},{李四,25},{王五,26}]
select name,age from B    ==> [{张三,24},{李四,25}]
select name,age from A 
INTERSECT
select name,age from B
--------- 
结果:[{张三,24},{李四,25}]