【SQL Server】超详细SQLServer日期转换、字符串、数学、聚合等常用函数大全(最新版)
文章目录
- 一、字符串函数
- 1、获取uuid
- 2、字符串截取
- 3、字符串拼接
- 4、字符串去空格
- 5、大小写转换
- 6、格式化数字为字符串
- 7、字符串替换、转换
- 8、查找与定位
- 9、ISNULL 判空取值
- 二、日期时间函数
- 1、获取当前日期和时间
- 2、提取日期部分
- 3、DATENAME(datepart,date_expr) 函数,返回指定日期的指定部分,返回字符串。获取年、月、日、星期、周数、时、分、秒
- 4、DATEPART(datepart,date_expr) 函数,用于返回日期/时间的单独部分,返回整数。获取年、月、日、小时、分钟
- 5、DATEDIFF(datepart,date_expr1.dateexpr2) 函数,返回两个指定日期之间间隔的时间
- 6、DATEADD(datepart,number,date_expr)函数,在日期中添加或减去指定的时间间隔。年、月、日 加上 number
- 7、EOMONTH(date_expr)函数,返回包含指定日期所在月份的最后一天
- 8、ISDATE 判断是否为有效日期
- 9、DATEFROMPARTS(year, month, day) 根据提供的年、月、日创建一个新的日期
- 三、CONVERT类型转换函数
- 四、CAST数据类型转换函数
- 五、数学函数
- 六、聚合函数
一、字符串函数
1、获取uuid
SELECT NEWID(); -- 9573749E-5942-4178-907C-6B39E74EDAA0 -- ( 无参数,返回一个GUID(全局唯一表示符)值 )
2、字符串截取
SELECT LEN('java'); -- 4 -- (LEN(expression) 返回字符串包含字符数) SELECT SUBSTRING('java',1,2); -- ja -- (SUBSTRING(expression, start, length) 截取字符串expression,下标从start开始,截取长度为length) SELECT RIGHT('java',3); -- ava -- (RIGHT(char_expr,int_expr) 返回字符串char_expr右边int_expr个字符) SELECT LEFT('java', 2); -- ja -- (LEFT(char_expr,int_expr) 返回字符串char_expr左边边int_expr个字符)
3、字符串拼接
SELECT CONCAT('ja','va'); -- java (CONCAT(char1,char2,...) 用于字符串拼接) SELECT 'ja' + 'va'; -- java ( + 也用于字符串拼接) SELECT 'ja' + SPACE(2) + 'va'; -- ja va (SPACE(int_expr) 生成int_expr个空格)
4、字符串去空格
SELECT TRIM( 'j' from 'java'); -- ava(去除字符串两边指定的字符,默认为空格) SELECT LTRIM(' java'); -- java (LTRIM(char_expr) 去除字符串char_expr左边的空格) SELECT RTRIM('java '); -- java (RTRIM(char_expr) 去除字符串char_expr右边的空格)
5、大小写转换
SELECT UPPER('java') -- java (UPPER(char_expr) char_expr转为大写) SELECT LOWER('JAVA'); -- java (LOWER(char_expr) char_expr转为小写)
6、格式化数字为字符串
SELECT STR(123.454,10,2) ; -- [ 123.46](不足10位前面补充空格,,精度会进行四舍五入) -- STR(float_expression [,length [,decimal]]) 把数值型数据转换为字符型数据 -- length(可选) 指定返回的字符串的长度,如果没有提供length,默认值为10 -- decimal(可选) 指定返回的小数位数,如果没有提供decimal,默认值为10 -- 当 length 或者 decimal 为负值时,返回NULL -- 当 length 小于小数点左边(包括符号位)的位数时,返回length 个* -- 先服从length ,再取decimal ; -- 当返回的字符串位数小于length ,左边补足空格
7、字符串替换、转换
select REPLACE('java', 'a', 'b'); -- jbvb (REPLACE(expression, find_string, replace_with) 在字符串中替换所有出现的指定子串) select REPLICATE('ja',3); -- jajaja (REPLICATE(char_expr,int_expr) 复制字符串int_expr次) select REVERSE('java'); -- avaj (REVERSE(char_expr) 反转字符串) select STUFF('java',1,2,'cc'); -- ccva ( STUFF(char_expr1,start,length,char_expr2) ) -- 将字符串char_expr1中的从start开始的length个字符用char_expr2代替,start下标从1开始 -- ASCII值与字符转换 select ASCII('A'); -- 65 (ASCII(char) 取ascii码) select CHAR(97); -- a (CHAR(ascii) 将ASCII 码转换为字符)
8、查找与定位
select CHARINDEX('a','java'); -- 2 (CHARINDEX(char_expr,expression) 返回char_expr的起始位置,下标从1开始) select PATINDEX('%v%','java'); -- 3 (PATINDEX('%pattern%',expression) 返回指定模式的起始位置,否则为0)
9、ISNULL 判空取值
select ISNULL(null,'1'); -- 1 select ISNULL('2','1'); -- 2 -- ( ISNULL(值1,值2) 如果值1不为NULL,则返回它的值;否则,在将任意表达式2的类型转换为值1的类型(如果这两个类型不同)后,返回值2的值 )
二、日期时间函数
1、获取当前日期和时间
select GETDATE(); -- 2024-03-16 15:38:54.403 (返回日期)
2、提取日期部分
select DAY(GETDATE()); -- 16 (取出天) select MONTH(GETDATE()); -- 3 (取出月) select YEAR(GETDATE()); -- 2024 (取出年)
3、DATENAME(datepart,date_expr) 函数,返回指定日期的指定部分,返回字符串。获取年、月、日、星期、周数、时、分、秒
SELECT DATENAME(YEAR,GETDATE()); -- 2024 (年) SELECT DATENAME(MONTH,GETDATE()); -- March (月) SELECT DATENAME(DAY,GETDATE()); -- 16 (日) SELECT DATENAME(HOUR,GETDATE()); -- 15 (时) SELECT DATENAME(MINUTE,GETDATE()); -- 53 (分) SELECT DATENAME(SECOND,GETDATE()); -- 3 (秒) SELECT DATENAME(WEEKDAY,GETDATE()); -- Saturday (星期) SELECT DATENAME(QUARTER,GETDATE()); -- 1 (第几季度) SELECT DATENAME(WEEK,GETDATE()); -- 11 (一年中的第几周) SELECT DATENAME(DAYOFYEAR,GETDATE()); -- 76 (一年中的第几天)
4、DATEPART(datepart,date_expr) 函数,用于返回日期/时间的单独部分,返回整数。获取年、月、日、小时、分钟
SELECT DATEPART(YY,GETDATE()); -- 2024 (年) SELECT DATEPART(mm,GETDATE()); -- 3 (月) SELECT DATEPART(dd,GETDATE()); -- 16 (日)
5、DATEDIFF(datepart,date_expr1.dateexpr2) 函数,返回两个指定日期之间间隔的时间
SELECT DATEDIFF(YEAR,'2023-01-01' ,GETDATE()); -- 1 (间隔时间/年) SELECT DATEDIFF(MONTH,'2024-01-01' ,GETDATE()); -- 2 (间隔时间/月) SELECT DATEDIFF(DAY,'2024-01-01',GETDATE()); -- 75 (间隔时间/天) SELECT DATEDIFF(DAY,'2024-01-01','2024-01-31'); -- 30 (间隔时间/天)
6、DATEADD(datepart,number,date_expr)函数,在日期中添加或减去指定的时间间隔。年、月、日 加上 number
SELECT DATEADD(YEAR,1,GETDATE()); -- 2025-03-16 16:06:46.910 (明年今日) SELECT DATEADD(YEAR,-1,GETDATE()); -- 2023-03-16 16:06:46.910 (去年今日) SELECT DATEADD(MONTH,+1,GETDATE()); -- 2024-04-16 16:06:46.910 (下月今日) SELECT DATEADD(DAY,30,GETDATE()); -- 2024-04-15 16:06:46.910 (XX天后)
7、EOMONTH(date_expr)函数,返回包含指定日期所在月份的最后一天
SELECT EOMONTH( '2024-01-01' ); -- 2024-01-31 (当月月末日期) SELECT EOMONTH( GETDATE() ); -- 2024-03-31 (当月月末日期)
8、ISDATE 判断是否为有效日期
select ISDATE(GETDATE()); -- 1 select ISDATE('2014-03-16'); -- 1 select ISDATE('201'); -- 0 -- ( ISDATE(值1) 确定输入值1是否为有效日期或可转成有效的日期,是1,不是0 )
9、DATEFROMPARTS(year, month, day) 根据提供的年、月、日创建一个新的日期
select DATEFROMPARTS(2024, 3, 16); -- 2024-03-16 --(DATEFROMPARTS(year, month, day) 根据提供的年、月、日创建一个新的日期)
附录1:datepart格式表格
(图片来源网络,侵删)datepart格式 描述 yy, yyyy, year 年 (1753-9999 年) qq, q, quarter 季度 (1-4 季度) mm, m, month 月份 (1-12 月) dy, y 年中的日 (1-366 日) dd, d, day 日 (1-31 日) wk,ww ,week 周 (1-54 周) dw, w, weekend 星期 (1-7 周几) hh, hour 小时 (0-23 小时) mi, n, minute 分钟 (0-59 分钟) ss, s, second 秒 (0-59 秒) ms 毫秒 (0-999 毫秒) 三、CONVERT类型转换函数
CONVERT(数据类型[(长度)],表达式[,样式]) – 将一种数据类型的表达式显式转换为另一种数据类型的表达式;
select CONVERT(VARCHAR(19),GETDATE()); -- Mar 17 2024 4:46AM select CONVERT(VARCHAR(19),GETDATE(),20); -- 2024-03-17 04:47:11 select CONVERT(VARCHAR(19),GETDATE(),23); -- 2024-03-17 select CONVERT(VARCHAR(24),GETDATE(),25); -- 2024-03-17 04:47:31.040
附录2:日期格式表格
格式 描述 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) 23 yyyy-mm-dd 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 四、CAST数据类型转换函数
--CAST函数用于将某种数据类型转换为另一种数据类型 --CAST(字段名 as 转换的类型 ) SELECT CAST(10.2748 as int); -- 10 (取整) SELECT CAST(12345.123 as float); -- 12345 (取浮点数) SELECT CAST(12345.123 as char); -- 12345.123 (转为字符串) SELECT CAST('2023-12-18 15:41:25' as char(16)); -- 2023-12-18 15:41 (字符串截取) SELECT CAST(NEWID() AS varchar(36)); -- DEEDAEB1-B32D-40D5-AE02-AFF972161B12 (随机字符串)
五、数学函数
select ABS(-123); -- 123 ( ABS(numeric_expr) 求绝对值 ) select ROUND(123.456,2); -- 123.460 ( ROUND(numeric_expr,int_expr) 安int_expr规定的精度四舍五入 select CEILING(123.45); -- 124 ( CEILING(numeric_expr) 取大于等于指定值的最小整数 ) select FLOOR(123.45); -- 123 ( FLOOR(numeric_expr) 小于等于指定值得最大整数 ) select EXP(3); -- 7.38905609893065 ( EXP(float_expr) 取指数 ) select PI(); -- 3.14159265358979 (取Π值) select POWER(2,2); -- 4 ( POWER(numeric_expr,power) 返回power次方 ) select RAND(10); -- 0.713759689954247 ( RAND([int_expr]) 随机数产生器 ) select SIGN(-10); -- -1 ( SIGN(int_expr) 根据正数,0,负数,,返回+1,0,-1 ) select SQRT(4); -- 2 ( SQRT(float_expr) 平方根 ) select ISNUMERIC(1); -- 1 select ISNUMERIC('1'); -- 1 select ISNUMERIC('a'); --0 -- (ISNUMERIC(值1) 判断值1是否为数值类型或者是否可以转换成数值)
六、聚合函数
count() -- 返回组中的总条数,count(*)返回组中所有条数,包括NULL值和重复值项,如果抒写表达式,则忽略空值,表达式为任意表达式。 max() -- 返回组中的最大值,空值将被忽略,表达式为数值表达式,字符串表达式,日期。 min() -- 返回组中的最小值,空值将被忽略,表达式为数值表达式,字符串表达式,日期。 sum() -- 返回组中所有值的和,空值将被忽略,表达式为数据表达式。 avg() -- 返回组中所有值的平均值,空值将被忽略,表达式为数据表达式。
参考文献:
https://www.cnblogs.com/long6286/p/12671308.html
https://blog.csdn.net/leanne50y/article/details/134974111
希望对小伙伴们有所帮助,完结,撒花❀❀
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。