SQL STRING_SPLIT() 函数
SQL STRING_SPLIT() 函数用于将字符串转换为列。
它接受 三个 参数 str , separator 和 enable_ordinal ,并根据指定的分隔符字符将字符串拆分为子字符串的行。如果未启用序数输出列, STRING_SPLIT() 函数返回一个单列表,其行是子字符串。
列的名称将为 VALUE 。如果输入参数中的任何一个是 nvarchar 或 nchar,则返回 nvarchar。否则,返回 varchar。返回类型的长度与字符串参数的长度相同。
语法
以下是 SQL STRING_SPLIT() 函数的语法:
STRING_SPLIT ( string , separator [ , enable_ordinal ] )
参数
- str − 它是任意字符类型的表达式(比如 nvarchar、varchar、nchar)。
-
separator − 它是任意字符类型的单个字符表达式,用作连接子字符串的分隔符。
-
enable_ordinal − 它是一个 int 或 bit 表达式,用作启用或禁用序号输出列的标志。
下面是关于 enable_ordinal 参数的一些重要说明:
- 它是一个可选参数。
-
如果 enable_ordinal 参数的值为 1 ,则启用序号列。
-
如果 enable_ordinal 的值为 NULL ,则序号列被省略。
-
如果 enable_ordinal 的值为 0 ,则禁用序号列。
示例
在以下示例中,我们使用 SQL STRING_SPLIT() 函数将字符串内容 (‘Java’, ‘HTML’, ‘CSS’, ‘JavaScript’, ‘Angular’) 转换为列。
SELECT VALUE FROM STRING_SPLIT('Java IS A PROGRAMMING LANGUAGE',' ');
输出
以下是以上语句的输出-
+--------------+
| VALUE |
+--------------+
| Java |
| IS |
| A |
| PROGRAMMING |
| LANGUAGE |
+--------------+
示例
如果我们将 enable_ordinal 参数的值设置为 1 传递给函数,它 启用 输出列。
在下面的示例中,我们使用 STRING_SPLIT() 函数将字符串 (’欢迎来到教程点家族’) 的内容转换为列。
SELECT * FROM STRING_SPLIT('Welcome to TutorialsPoint Family', ' ', 1);
输出
执行上述程序后,将产生以下输出:
+-----------------+---------+
| VALUE | ordinal |
+-----------------+---------+
| Welcome | 1 |
| to | 2 |
| TutorialsPoint | 3 |
| Family | 4 |
+-----------------+---------+
示例
如果您将 enable_ordinal 参数的值设为 0 传递给函数,它 禁用 输出列。
在下面的示例中,我们将 enable_ordinal 参数的值设为0传递给 STRING_SPLIT() 函数。然后,使用此函数,我们试图将字符串 (‘Hello World’) 的内容转换为一列。
SELECT * FROM STRING_SPLIT('Hello World',' ', 0);
输出
上述程序生成以下输出 −
+----------+
| VALUE |
+----------+
| Hello |
| World |
+----------+
示例
如果我们将 enable_ordinal 参数值传递为 NULL 给函数,该函数会忽略输出列。
在下面的示例中,我们将enable_ordinal参数值传递为NULL给 STRING_SPLIT() 函数。然后,我们使用这个函数尝试将字符串内容 (‘Java IS A PROGRAMMING LANGUAGE’,’ ‘, NULL) 转换成列。
SELECT VALUE FROM STRING_SPLIT('Java IS A PROGRAMMING LANGUAGE',' ', NULL);
输出
以下是上述SQL查询的输出结果-
+--------------+
| VALUE |
+--------------+
| Java |
| IS |
| A |
| PROGRAMMING |
| LANGUAGE |
+--------------+
示例
您还可以将表列作为参数传递给 STRING_SPLIT() 函数,以便根据值列表查找行。假设我们使用以下 CREATE 语句创建了一张名为 Customers 的表 −
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
FIRST_NAME VARCHAR (20),
LAST_NAME VARCHAR(20),
AGE INT NOT NULL,
ADDRESS CHAR (25) ,
SALARY DECIMAL (18, 2));
现在,让我们使用INSERT语句将四条记录插入到customers表中,如下所示: records 。
INSERT INTO CUSTOMERS VALUES (2, 'Ramesh','KUMAR', 32, 'Ahmedabad', 2000.00 );
INSERT INTO CUSTOMERS VALUES (3, 'Khilan','Verma', 25, 'Delhi', 1500.00 );
INSERT INTO CUSTOMERS VALUES (3, 'kaushik','Gupta', 23, 'Kota', 2000.00 );
INSERT INTO CUSTOMERS VALUES (5, 'Chaitali','Pal', 25, 'Mumbai', 6500.00 );
下面的SQL查询通过Customers表的值列表检索行:
SELECT * FROM CUSTOMERS JOIN STRING_SPLIT('3',' ', 1) on value = ID;
输出
以下是上述查询的输出结果 –
+----+------------+-----------+-----+-----------+---------+-------+----------+
| ID | FIRST_NAME | LAST_NAME | AGE | ADDRESS | SALARY | value | ordinal |
+----+------------+-----------+-----+-----------+---------+-------+----------+
| 3 | Khilan | Verma | 25 | Delhi | 1500.00 | 3 | 1 |
| 3 | kaushik | Gupta | 23 | Kota | 2000.00 | 3 | 1 |
+----+------------+-----------+-----+-----------+---------+-------+----------+