SQL Server 2022 STRING_SPLIT表值函數特性增強

SQL Server 2022 STRING_SPLIT表值函數特性增強

1、本文內容

  • List item
  • 語法
  • 參數
  • 返回類型
  • 注解

適用于:SQL Server 2016 (13.x) 及更高版本Azure SQL 數據庫Azure SQL 托管實例Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 分析終結點Microsoft Fabric 中的倉庫

STRING_SPLIT 是一個表值函數,它根據指定的分隔符將字符串拆分為子字符串行。

兼容性級別為 130
STRING_SPLIT 要求兼容性級別至少為 130。 該級別低于 130 時,數據庫引擎將找不到 STRING_SPLIT 函數。

若要更改數據庫的兼容性級別,請參閱查看或更改數據庫的兼容性級別。

備注:在 Azure Synapse Analytics 中,無需對 STRING_SPLIT 進行兼容性配置。

參考官方文檔地址
https://learn.microsoft.com/zh-cn/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver16

2、語法

STRING_SPLIT ( string , separator [ , enable_ordinal ] )

3、參數

string
任何字符類型(例如 nvarchar、varchar、nchar 或 char)的表達式。

separator
任何字符類型(例如nvarchar(1)、varchar(1)、nchar(1) 或 char(1))的單字符表達式,用作串聯子字符串的分隔符。

enable_ordinal
適用于:Azure SQL 數據庫、Azure SQL 托管實例、Azure Synapse Analytics(僅限無服務器 SQL 池)、SQL Server 2022 (16.x) 及更高版本,也是該版本新加特性。

一個 int 或 bit 表達式,用作啟用或禁用 ordinal 輸出列的標志。 如果值為 1,則啟用 ordinal 列。 如果省略 enable_ordinal 、為 NULL 或值為 0,則禁用 ordinal 列。

4、返回類型

如果未啟用 ordinal 輸出列,STRING_SPLIT 將返回一個單列表,其中的行為子字符串。 列的名稱為 value。 如果任何輸入參數為 nvarchar 或 nchar,則它返回 nvarchar 。 否則,將返回 varchar。 返回類型的長度與字符串參數的長度相同。
如果 enable_ordinal 參數傳遞的值為 1,則返回第二個名為 ordinal 的列,其中包含每個子字符串在輸入字符串中的位置(從 1 開始的索引值)。 返回類型為 bigint

5、注解

STRING_SPLIT 輸入一個包含分隔子字符串的字符串,并輸入一個字符用作分隔符。 根據需要,函數還支持值為 0 或 1 的第三個參數,該參數分別禁用或啟用了 ordinal 輸出列。

STRING_SPLIT 輸出一個單列表或雙列表,具體取決于 enable_ordinal 參數。

如果 enable_ordinal 為 NULL、被省略或值為 0,STRING_SPLIT 將返回一個單列表,其中的行包含子字符串。 輸出列的名稱為 value。

如果 enable_ordinal 的值為 1,該函數將返回一個包含兩列的表,其中 ordinal 列由原始輸入字符串中從 1 開始的子字符串的索引值組成。

請注意,enable_ordinal 參數必須是常數值,而不能是列或變量。 它還必須是值為 0 或 1 的 bit 或 int 數據類型。 否則,此函數將引發錯誤。

輸出行可以按任意順序排列。 順序不保證與輸入字符串中的子字符串順序匹配。 可以通過使用 ORDER BY 子句(在 SELECT 語句中)覆蓋最終排序順序,例如 ORDER BY value 或 ORDER BY ordinal。

0x0000 (char(0)) 是 Windows 排序規則中未定義的字符,無法包括在 STRING_SPLIT 中。

當輸入字符串包含兩個或多個連續出現的分隔符字符時,將出現長度為零的空子字符串。 空子字符串的處理方式與普通子字符串相同。 可以通過使用 WHERE 子句篩選出包含空的子字符串的任何行,例如 WHERE value <> ‘’。 如果輸入字符串為 NULL,則 STRING_SPLIT 表值函數返回一個空表。

5.1、在SQLServer2016/2019版本,執行語句

SELECT * FROM STRING_SPLIT('hello sqlserver2022 SQLServer Management Studio',' ')value                                           ordinal
----------------------------------------------- --------------------
hello                                           1
sqlserver2022                                   2
SQLServer                                       3
Management                                      4
Studio                                          5
-- 如果多指定一個參數,表示啟用enable_ordinal ,SQLServer2016/2019版本就不支持
SELECT * FROM STRING_SPLIT('hello sqlserver2022 SQLServer Management Studio',' ',1)
/*消息 8144,級別 16,狀態 3,第 100 行
為過程或函數 STRING_SPLIT 指定了過多的參數*/

5.2、在SQLServer2022

SELECT * FROM STRING_SPLIT('hello sqlserver2022 SQLServer Management Studio', ' ',1);value                                           ordinal
----------------------------------------------- --------------------
hello                                           1
sqlserver2022                                   2
SQLServer                                       3
Management                                      4
Studio                                          5

6、示例

6.1、拆分逗號分隔值字符串

分析逗號分隔值列表,并返回所有非空標記:

SELECT * FROM STRING_SPLIT('hello,sqlserver2022,SQLServer,,Management Studio', ',',1);value                                            ordinal
------------------------------------------------ --------------------
hello                                            1
sqlserver2022                                    2
SQLServer                                        34
Management Studio                                5-- RTRIM(value) 過濾空值
SELECT * FROM STRING_SPLIT('hello,sqlserver2022,SQLServer,,Management Studio', ',',1) WHERE RTRIM(value) <> '';value                                            ordinal
------------------------------------------------ --------------------
hello                                            1
sqlserver2022                                    2
SQLServer                                        3
Management Studio                                5
-- 如果分隔符之間沒有任何內容,STRING_SPLIT將返回空字符串。RTRIM(value) <> '' 條件將過濾空值value。

6.2、 拆分一列中的逗號分隔值字符串

生產表中的某一列為逗號分隔的標記列表,如以下示例所示:

WITH Product(ProductId,NameInfo,tags) AS (
SELECT 1,'mssql','sqlserver2016,sqlserver2019,sqlserver2022'
UNION ALL
SELECT 2,'oracle','oracle11g,oracle12c,mysql8.4'
)
SELECT ProductId, NameInfo, value
FROM ProductCROSS APPLY STRING_SPLIT(Tags, ',');ProductId   NameInfo value
----------- -------- -----------------------------------------
1           mssql    sqlserver2016
1           mssql    sqlserver2019
1           mssql    sqlserver2022
2           oracle   oracle11g
2           oracle   oracle12c
2           oracle   mysql8.4

6.3、按序號值為行排序

下面的語句返回輸入字符串的拆分子字符串值及其序號值,按 ordinal 列排序

-- 倒序排序
SELECT * FROM STRING_SPLIT(N'深圳-廣州-中山-東莞-珠海', '-', 1) ORDER BY ordinal DESC;value          ordinal
-------------- --------------------
珠海             5
東莞             4
中山             3
廣州             2
深圳             1
-- 升序排序
SELECT * FROM STRING_SPLIT(N'深圳-廣州-中山-東莞-珠海', '-', 1) ORDER BY ordinal;value          ordinal
-------------- --------------------
深圳             1
廣州             2
中山             3
東莞             4
珠海             5

6.4、按序號值查找行

以下語句將查找具有偶數索引值的所有行

SELECT value AS v_split, ordinal FROM STRING_SPLIT(N'深圳-廣州-中山-東莞-珠海', '-', 1) WHERE ordinal % 2 = 0;v_split        ordinal
-------------- --------------------
廣州             2
東莞             4

6.5、按標記值搜索

6.5.1、查找具有單個標記 (sqlserver2022) 的數據行

WITH Product(ProductId,NameInfo,tags) AS (
SELECT 1,'mssql','sqlserver2016,sqlserver2019,sqlserver2022'
UNION ALL
SELECT 2,'oracle','oracle11g,oracle12c,mysql8.4'
)
SELECT ProductId, NameInfo, Tags
FROM Product
WHERE 'sqlserver2022' IN (SELECT value FROM STRING_SPLIT(Tags, ','));
ProductId   NameInfo Tags
----------- -------- -----------------------------------------
1           mssql    sqlserver2016,sqlserver2019,sqlserver2022

6.5.2、查找具有兩個指定標記(sqlserver2022和 mysql8.4)的數據行

WITH Product(ProductId,NameInfo,tags) AS (
SELECT 1,'mssql','sqlserver2016,sqlserver2019,sqlserver2022'
UNION ALL
SELECT 2,'oracle','oracle11g,oracle12c,mysql8.4'
UNION ALL
SELECT 3,'postgresql','postgresql16,postgresql15'
)
SELECT ProductId, NameInfo, Tags
FROM Product
WHERE EXISTS (SELECT *FROM STRING_SPLIT(Tags, ',')WHERE value IN ('sqlserver2022', 'mysql8.4'));ProductId   NameInfo   Tags
----------- ---------- -----------------------------------------
1           mssql      sqlserver2016,sqlserver2019,sqlserver2022
2           oracle     oracle11g,oracle12c,mysql8.4

6.6、按一系列值查找行

WITH Product(ProductId,NameInfo,tags) AS (
SELECT 1,'mssql','sqlserver2016,sqlserver2019,sqlserver2022'
UNION ALL
SELECT 2,'oracle','oracle11g,oracle12c,mysql8.4'
UNION ALL
SELECT 3,'postgresql','postgresql16,postgresql15'
)
SELECT ProductId, NameInfo, Tags
FROM Product
JOIN STRING_SPLIT('1,3',',')ON value = ProductId;ProductId   NameInfo   Tags
----------- ---------- -----------------------------------------
1           mssql      sqlserver2016,sqlserver2019,sqlserver2022
3           postgresql postgresql16,postgresql15

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16052.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16052.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16052.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

golang內置包strings和bytes中的Map函數的理解和使用示例

在go的標志內置包strings和bytes中都有一個函數Map, 這個函數的作用是&#xff1a; 將輸入字符串/字節切片中的每個字符使用函數處理后映射后返回一份字符串/字節切片的副本&#xff0c;如果函數中的某個字符返回負數則刪除對應的字符。 作用很簡單&#xff0c;當時對于新手來…

Qt_tftp(未總結)

記錄一下tftp傳輸,日后總結 #ifndef CLIENTWORK_H #define CLIENTWORK_H#include <QObject> #include <QThread>#include <QHostAddress>

關于C的\r回車在不同平臺的問題

首先我們需要搞明白\r和\n是兩回事 \r是回車&#xff0c;前者使光標到行首&#xff0c;&#xff08;carriage return&#xff09; \n是換行&#xff0c;后者使光標下移一格&#xff0c;&#xff08;line feed&#xff09; Linux平臺下 #include <stdio.h> int main()…

Unidac連接Excel文件

終于找到一個連接字符串&#xff0c;記錄一下 UniConnection1.ConnectString : Format(Provider NameODBC;Server"DRIVERMicrosoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb); DBQ%s", [FileName]); UniConnection1.connected:true; UniConnection1.gettable…

神經網絡不確定性綜述(Part I)——A survey of uncertainty in deep neural networks

相關鏈接&#xff1a; 神經網絡不確定性綜述(Part I)——A survey of uncertainty in deep neural networks-CSDN博客 神經網絡不確定性綜述(Part II)——Uncertainty estimation_Single deterministic methods-CSDN博客 神經網絡不確定性綜述(Part III)——Uncertainty est…

Python實現xml解析并輸出到Excel上

1.編寫xml文件 2.使用Python的ElementTree模塊來解析XML import xml.etree.ElementTree as ET from openpyxl import Workbook # 解析XML函數 def parse_xml(xml_file):tree ET.parse(xml_file)root tree.getroot() --打開根節點data []for user in root.findall(Users/Us…

1.手動LogisticRegression模型的訓練和預測

通過這個示例&#xff0c;可以了解邏輯回歸模型的基本原理和訓練過程&#xff0c;同時可以通過修改和優化代碼來進一步探索機器學習模型的訓練和調優方法。 過程: 生成了一個模擬的二分類數據集&#xff1a;通過隨機生成包含兩個特征的數據data_x&#xff0c;并基于一定規則生…

秋招突擊——算法打卡——5/25、5/26——尋找兩個正序數組的中位數

題目描述 自我嘗試 首先&#xff0c;就是兩個有序的數組進行遍歷&#xff0c;遍歷到一半即可。然后求出均值&#xff0c;下述是我的代碼。但這明顯是有問題的&#xff0c;具體錯誤的代碼如下。計算復雜度太高了&#xff0c;O&#xff08;n&#xff09;&#xff0c;所以會超時&…

數據結構--《二叉樹》

二叉樹 1、什么是二叉樹 二叉樹(Binar Tree)是n(n>0)個結點的優先集合&#xff0c;該集合或者為空集(稱為空二叉樹)&#xff0c;或者由一個根結點和兩顆互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹構成。 這里給張圖&#xff0c;能更直觀的感受二叉樹&#xff1…

GDPU JavaWeb mvc模式

搭建一個mvc框架的小實例。 簡易計算器 有一個名為inputNumber.jsp的頁面提供一個表單&#xff0c;用戶可以通過表單輸入兩個數和運算符號提交給Servlet控制器&#xff1b;由名為ComputerBean.java生成的JavaBean負責存儲運算數、運算符號和運算結果&#xff0c;由名為handleCo…

C#中獲取FTP服務器文件

1、從ftp下載pdf的方法 public static void DownloadPdfFileFromFtp(string ftpUrl,string user,string password string localPath) { // 創建FtpWebRequest對象 FtpWebRequest request (FtpWebRequest)WebRequest.Create(ftpUrl); request.Method WebRequestMethods.Ftp…

簡單好用的文本識別方法--付費的好用,免費的更有性價比-記筆記

文章目錄 先說付費的進入真題&#xff0c;免費的來喏&#xff01;PixPin微信 先說付費的 直達網址!!! 進入真題&#xff0c;免費的來喏&#xff01; PixPin 商店里就有 使用示例&#xff1a; 可以看到&#xff1a;貼在桌面上的圖片可以復制圖片中的文字&#xff0c;真的很…

深入了解ASPICE標準:提升汽車軟件開發與質量管理的利器

隨著汽車行業的快速發展和技術創新&#xff0c;汽車軟件的開發和質量管理的重視程度不斷提升。ASPICE&#xff08;Automotive Software Process Improvement and Capability Determination&#xff09;標準作為一種專門針對汽車軟件開發過程的改進和能力評定的框架&#xff0c;…

Springboot+Vue+ElementUI開發前后端分離的員工管理系統01--系統介紹

項目介紹 springboot_vue_emp是一個基于SpringbootVueElementUI實現的前后端分離的員工管理系統 功能涵蓋&#xff1a; 系統管理&#xff1a;用戶管理、角色管理、菜單管理、字典管理、部門管理出勤管理&#xff1a;請假管理、考勤統計、工資發放、工資統計、離職申請、個人資…

8.Redis之hash類型

1.hash類型的基本介紹 哈希表[之前學過的所有數據結構中,最最重要的] 1.日常開發中,出場頻率非常高. 2.面試中,非常重要的考點, Redis 自身已經是鍵值對結構了Redis 自身的鍵值對就是通過 哈希 的方式來組織的 把 key 這一層組織完成之后, 到了 value 這一層~~ value 的其中…

最重要的時間表示,柯橋外貿俄語小班課

в第四格 1、與表示“鐘點”的數詞詞組連用 例&#xff1a; в шесть часов утра 在早上六點 в пять тридцать 在五點半 2、與表示“星期”的名詞連用 例&#xff1a; в пятницу 在周五 в следующий понедельник …

包和依賴管理:Python的pip和conda使用指南

包和依賴管理&#xff1a;Python的pip和conda使用指南 對于Python新手來說&#xff0c;包和依賴管理可能是一個令人困惑的概念。但不用擔心&#xff0c;本文將用淺顯易懂的語言&#xff0c;詳細介紹如何使用Python的兩個主要包管理工具&#xff1a;pip和conda。我們還會探討在安…

為 AWS 子賬戶添加安全組修改權限

文章目錄 步驟 1&#xff1a;創建 IAM 策略步驟 2&#xff1a;附加策略到子賬戶步驟 3&#xff1a;驗證權限 本文檔將操作如何為 AWS 子賬戶&#xff08;IAM 用戶或角色&#xff09;添加修改安全組的權限&#xff0c;包括 AuthorizeSecurityGroupIngress 和 RevokeSecurityGr…

解決uniApp 中不能直接使用 Axios 的問題

最近在使用 uniapp 進行小程序開發的時候&#xff0c;發現 uniapp 不能直接使用 axios&#xff0c;需要自己進行封裝一個 http 庫使用&#xff0c;于是有了這個項目。 項目地址&#xff1a;https://www.npmjs.com/package/uni-app-wxnetwork-tool 該包的功能介紹&#xff1a; u…

String類為什么設計成不可變的?

目錄 緩存 安全性 線程安全 hashCode緩存 性能 其實這個問題我們可以通過緩存、安全性、線程安全和性能幾個維度去解析。 緩存 字符串是Java最常用的數據結構&#xff0c;我們都知道字符串大量創建是非常耗費資源的&#xff0c;所以Java中就將String設計為帶有緩存的功能…