Microsoft SQL Server 2022 新特性之 T-SQL 语言增强

这篇具有很好参考价值的文章主要介绍了Microsoft SQL Server 2022 新特性之 T-SQL 语言增强。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Microsoft SQL Server 2022 已经正式发布,可以下载使用。本文给大家介绍一下该版本中的部分 T-SQL 新功能。

窗口函数增强

新版本中的窗口函数支持命名窗口(WINDOW)子句,可以利用该子句定义窗口变量,然后在 OVER 子句中使用该窗口变量。

举例说明(示例脚本):

SELECT d.dept_name AS "部门名称", e.emp_name AS "姓名", e.salary AS "月薪",
       ROW_NUMBER() OVER w AS "row_number",
       RANK() OVER w AS "rank",
       DENSE_RANK() OVER w AS "dense_rank",
       PERCENT_RANK() OVER w AS "percent_rank"
FROM employee e
JOIN department d ON (e.dept_id = d.dept_id)
WINDOW w AS (PARTITION BY e.dept_id ORDER BY e.salary DESC);

部门名称 |姓名 |月薪      |row_number|rank|dense_rank|percent_rank       |
-----+---+--------+----------+----+----------+-------------------+
行政管理部|刘备 |30000.00|         1|   1|         1|                0.0|
行政管理部|关羽 |26000.00|         2|   2|         2|                0.5|
行政管理部|张飞 |24000.00|         3|   3|         3|                1.0|
人力资源部|诸葛亮|24000.00|         1|   1|         1|                0.0|
人力资源部|黄忠 | 8000.00|         2|   2|         2|                0.5|
人力资源部|魏延 | 7500.00|         3|   3|         3|                1.0|
...

示例使用 WINDOW 子句定义了一个窗口变量 w,然后在 4 个窗口函数的 OVER 子句中使用了该变量。这种使用窗口变量的写法可以简化窗口选项的输入。

新增的 WINDOW 子句还支持其他用法,具体可以查看官方文档。

IS DISTINCT FROM

IS [NOT] DISTINCT FROM 的作用是判断两个表达式是否相同,它们支持 NULL 值的比较。例如:

CREATE TABLE test(id INT);
INSERT INTO test VALUES(100);

SELECT * 
FROM test 
WHERE 1 IS NOT DISTINCT FROM 1;
id |
---+
100|

SELECT * 
FROM test 
WHERE 1 IS NOT DISTINCT FROM 2;
id|
--+

SELECT * 
FROM test 
WHERE NULL IS NOT DISTINCT FROM NULL;
id |
---+
100|

SELECT * 
FROM test 
WHERE NULL = NULL;
id|
--+

注意,IS NOT DISTINCT FROM 的作用类似于 =,IS DISTINCT FROM 的作用类似于 !=,具体说明参考官方文档。

时间序列函数

新增 DATE_BUCKET() 函数,用于返回从指定时间点开始,以固定日期时间间隔为存储桶的每个起始日期时间。例如:

DECLARE @date DATETIME2 = '2022-11-20 21:22:11';
DECLARE @orign DATETIME2 = '2022-11-01 00:00:00';

SELECT DATE_BUCKET(WEEK, 1, @date, @orign);
                       |
-----------------------+
2022-11-15 00:00:00.000|

SELECT DATE_BUCKET(WEEK, 2, @date, @orign);
                       |
-----------------------+
2022-11-15 00:00:00.000|

SELECT DATE_BUCKET(WEEK, 3, @date, @orign);
                       |
-----------------------+
2022-11-01 00:00:00.000|

从 2022-11-01 00:00:00 开始,以 1 或者 2 周为存储桶计算,包含 2022-11-20 21:22:11 的存储桶的起始日期为 2022-11-15 00:00:00。如果以 3 周为存储桶计算,包含 2022-11-20 21:22:11 的存储桶的起始日期为 2022-11-01 00:00:00。

新增 GENERATE_SERIES() 函数,可以用于生成数字序列,例如:

SELECT value FROM GENERATE_SERIES(1, 5);
value
-----------
1
2
3
4
5

SELECT value FROM GENERATE_SERIES(10, 1, -2);
value
-----------
10
8
6
4
2

另外,以下窗口函数支持 IGNORE NULLS 和 RESPECT NULLS 选项,分别表示计算时忽略或者考虑 NULL 值:

  • FIRST_VALUE()
  • LAST_VALUE()

JSON 函数增强

新版本中的 ISJSON() 函数增加了一个可选参数:

ISJSON ( expression [, json_type_constraint] )

参数 json_type_constraint 用于指定要测试的 JSON 类型,包括 VALUE、ARRAY、OBJECT 或 SCALAR。例如:

SELECT ISJSON('true', VALUE);

SELECT ISJSON('test string', VALUE);

新增 JSON_PATH_EXISTS() 函数,可以用于检查 JSON 字符串中是否存在指定的 SQL/JSON 路径。例如:

DECLARE @jsonInfo NVARCHAR(MAX)

SET @jsonInfo=N'{"info":{"address":[{"town":"Paris"},{"town":"London"}]}}';

SELECT JSON_PATH_EXISTS(@jsonInfo,'$.info.address'); -- 1

新增 JSON_OBJECT() 函数,用于构造 JSON 对象。例如:

SELECT JSON_OBJECT('name':'value', 'type':1);

{"name":"value","type":1}

新增 JSON_ARRAY() 函数,用于构造 JSON 数组。例如:

SELECT JSON_ARRAY('a', JSON_OBJECT('name':'value', 'type':1));

["a",{"name":"value","type":1}]

聚合函数增强

新增 APPROX_PERCENTILE_CONT() 以及 APPROX_PERCENTILE_DISC() 函数,可以返回一组数据中的近似百分位数。

对于大型数据集,它们可以用作 PERCENTILE_CONT 以及 PERCENTILE_DISC 的替代方法,与响应时间较慢的准确百分位值相比,可以接受可忽略的错误和较快的响应。

T-SQL 函数增强

新增 GREATEST() 以及 LEAST(),分别用于返回一个或多个参数中的最大值以及最小值。例如:

SELECT GREATEST ('6.62', 3.1415, N'7')AS GreatestVal,
       LEAST ('6.62', 3.1415, N'7')AS LeastVal;

GreatestVal|LeastVal|
-----------+--------+
     7.0000|  3.1415|

STRING_SPLIT() 函数支持一个额外的可选参数,可以为拆分后的每个字符串返回一个序号。例如:

SELECT * FROM STRING_SPLIT('SQL Server 2022', ' ', 1);

value |ordinal|
------+-------+
SQL   |      1|
Server|      2|
2022  |      3|

新增 DATETRUNC() 函数,可以对日期时间数据进行截断。例如:

DECLARE @d datetime2 = '2021-12-08 11:30:15.1234567';
SELECT 'Year', DATETRUNC(year, @d);
SELECT 'Quarter', DATETRUNC(quarter, @d);
SELECT 'Month', DATETRUNC(month, @d);
SELECT 'Week', DATETRUNC(week, @d); -- Using the default DATEFIRST setting value of 7 (U.S. English)
SELECT 'Iso_week', DATETRUNC(iso_week, @d);
SELECT 'DayOfYear', DATETRUNC(dayofyear, @d);
SELECT 'Day', DATETRUNC(day, @d);
SELECT 'Hour', DATETRUNC(hour, @d);
SELECT 'Minute', DATETRUNC(minute, @d);
SELECT 'Second', DATETRUNC(second, @d);
SELECT 'Millisecond', DATETRUNC(millisecond, @d);
SELECT 'Microsecond', DATETRUNC(microsecond, @d);

Year        2021-01-01 00:00:00.0000000
Quarter     2021-10-01 00:00:00.0000000
Month       2021-12-01 00:00:00.0000000
Week        2021-12-05 00:00:00.0000000
Iso_week    2021-12-06 00:00:00.0000000
DayOfYear   2021-12-08 00:00:00.0000000
Day         2021-12-08 00:00:00.0000000
Hour        2021-12-08 11:00:00.0000000
Minute      2021-12-08 11:30:00.0000000
Second      2021-12-08 11:30:15.0000000
Millisecond 2021-12-08 11:30:15.1230000
Microsecond 2021-12-08 11:30:15.1234560

LTRIM() 以及 RTRIM() 函数支持一个额外的可选参选,可以指定要删除的字符。例如:

SELECT LTRIM('123abc.' , '123.'), RTRIM('.123abc.' , 'abc.');

    |    |
----+----+
abc.|.123|

TRIM() 函数可以选择从字符串的开头和/或末尾删除空格字符或其他指定字符。例如:

SELECT TRIM(LEADING '-' FROM  '---SQL Server 2022---') AS lead,
       TRIM(TRAILING '-' FROM  '---SQL Server 2022---') AS trail,
       TRIM(BOTH '-' FROM  '---SQL Server 2022---') AS both;

lead              |trail             |both           |
------------------+------------------+---------------+
SQL Server 2022---|---SQL Server 2022|SQL Server 2022|

位操作函数

新增,LEFT_SHIFT() 函数以及 << 运算符,用于实现按位左移运算。例如:

SELECT LEFT_SHIFT(1, 5), 1<<5;

  |  |
--+--+
32|32|

新增 RIGHT_SHIFT() 函数以及 >> 运算符,用于实现按位右移运算。例如:

SELECT RIGHT_SHIFT(32, 2), 32>>2;

 | |
-+-+
8|8|

新增 BIT_COUNT() 函数,用于返回整数或者二进制数中设置为 1 的位数。例如:

SELECT BIT_COUNT(10) as Count1, BIT_COUNT(0x0a) as Count2;

Count1|Count2|
------+------+
     2|     2|

整数 10 和十六进制 0x0a 的二进制表达式都为 1010,只有 2 位设置为 1。

新增 GET_BIT() 函数,用于返回整数或者二进制数中指定偏移量对应的位,偏移量从 0 开始。例如:

SELECT GET_BIT(10, 1) as Get_1st_Bit, GET_BIT(10, 2) as Get_2nd_Bit;

Get_1st_Bit|Get_2nd_Bit|
-----------+-----------+
          1|          0|

整数 10 的二进制表达式为 1010,偏移量为 1 的位为 1,偏移量为 2 的位为 0。

新增 SET_BIT() 函数,用于设置并返回整数或者二进制数中指定偏移量对应的位,偏移量从 0 开始。例如:

SELECT SET_BIT(10, 0) as Result1,  SET_BIT(10, 1, 0) as Result2;

Result1|Result2|
-------+-------+
     11|      8|

整数 10 的二进制表达式为 1010,将偏移量为 0 的位设置为 1,返回结果为二进制的 1011,也就是十进制的 11。将偏移量为 1 的位设置为 0,返回结果为二进制的 1000,也就是十进制的 8。文章来源地址https://www.toymoban.com/news/detail-441672.html

到了这里,关于Microsoft SQL Server 2022 新特性之 T-SQL 语言增强的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SQL Server】数据库开发指南(三)面向数据分析的 T-SQL 编程技巧与实践

    本系列博文还在更新中,收录在专栏:#MS-SQL Server 专栏中。 本系列文章列表如下: 【SQL Server】 Linux 运维下对 SQL Server 进行安装、升级、回滚、卸载操作 【SQL Server】数据库开发指南(一)数据库设计的核心概念和基本步骤 【SQL Server】数据库开发指南(二)MSSQL数据库开发对

    2023年04月12日
    浏览(109)
  • 【数据库·关系数据库标准语言SQL·学习笔记】Microsoft SQL Server数据库的建立和删除

    开发环境:SQL Server Management Studio(SSMS) 利用数据库对象资源管理器创建数据库 (1)右击对象资源管理器中的数据库,选择新建数据库 (2)在新建数据库界面输入数据库名称 ,并选择确定 利用CREAT DATABASE命令在SSM工具的新建查询中创建数据库 1.语法格式 CREATE DATABASE dat

    2024年02月08日
    浏览(60)
  • Microsoft SQL Server 2008 R2(Microsoft SQL Server,错误: 2)

    打开SQL Server 2008 R2,连接数据库引擎,出现以下错误: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连

    2024年02月11日
    浏览(63)
  • 附加Microsoft SQL Server数据库时报错,Microsoft SQL Server,错误: 5120

    附加Microsoft SQL Server数据库时报错, 错误信息: 无法打开物理文件“xxx.mdf”。操作系统错误 5:“5(拒绝访问。)”。 (Microsoft SQL Server,错误: 5120) 有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20ServerProdVer=11.00.2100EvtSrc=MSSQLServerEvtID=5120LinkId=20476 解决方法:

    2024年02月16日
    浏览(71)
  • VSCode插件 SQL Server 连接 Microsoft Server SQL

    之前一直用SQL Server Management Studio连接数据库,感SQL Server Management Studio连接骤要简单一些,有时候就需要从IDE切换到数据库比较麻烦还比较消耗机器资源,so想尝试vs code连接数据库,就顺便把我的步骤记录下来。 先在vs code用快捷键(Ctrl + Shift + X)打开扩展页面,输入sql ser

    2024年02月05日
    浏览(53)
  • [Microsoft] [SQL Server的ODBC驱动程序11] SQL Server网络接口:连接字符串无效[87] [Microsoft] [SQL Server的ODBC驱动程序

    解决 [Microsoft] [SQL Server的ODBC驱动程序11] SQL Server网络接口:连接字符串无效[87]     [Microsoft] [SQL Server的ODBC驱动程序11]登录超时已过期     [Microsoft] [SQL Server的ODBC驱动程序11]建立与SQL Server的连接时发生了与网络相关或特定于实例的错误。请检查实例名称是否正确以及SQL SER

    2024年02月10日
    浏览(51)
  • Microsoft SQL Server 介绍

    SQL Server 是 Microsoft 开发的一个关系数据库管理系统(RDBMS),现在是世界上最为常用的数据库; SQL Server 是一个高度可扩展的产品,可以从一个单一的笔记本电脑上运行的任何东西或以高倍云服务器网络,或在两者之间任何东西。虽然说是“任何东西”,但是仍然要满足相关的

    2024年02月03日
    浏览(32)
  • Microsoft SQL Server 2005安装

    SQL Server 2005中文版是一款由Microsoft 公司推出的关系型数据库管理系统软件。SQL Server 2005中文版具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越多种平台从运行Microsoft Windows 98 的膝上型电脑到Windows 2012 的大型多处理器的服务器。能够在多个平台、应用程序和设

    2024年02月04日
    浏览(39)
  • 审核 Microsoft SQL Server 日志

    手动审核数据库活动是一项艰巨的任务,有效完成审计的最佳方法是使用简化和自动化数据库监控的综合解决方案,该解决方案还应使数据库管理员能够监控、跟踪和即时识别任何操作问题的根本原因,并实时检测对机密数据的未经授权的访问。 SQL Server 日志是 Microsoft SQL

    2024年02月07日
    浏览(40)
  • SQL Server2022安装教程

    SQL Server 是一个关系数据库管理系统。它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2版本。在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server移植到Windows NT系统上,专注于开发推广SQL Server 的Windows N

    2024年02月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包