1、语法: STRING_SPLIT ( string , separator [ , enable_ordinal ] )
解释:将一个包含分隔子字符串的字符串,通过字符分隔符,输出一个单列表或双列表,这取决于enable_ordinal参数
2、参数:
string
任何字符类型(例如 nvarchar、varchar、nchar 或 char)的表达式。
separator
任何字符类型(例如nvarchar(1)、varchar(1)、nchar(1) 或 char(1))的单字符表达式,用作串联子字符串的分隔符。
enable_ordinal
一个 int 或 bit 表达式,用作启用或禁用 ordinal 输出列的标志。
如果值为 1,则启用 ordinal 列。
如果省略 enable_ordinal 、为 NULL 或值为 0,则禁用 ordinal 列。
3、返回类型
如果未启用 ordinal 输出列,STRING_SPLIT 将返回一个单列表,其中的行即子字符串。 列的名称为 value。 如果任何输入参数为 nvarchar 或 nchar,则它返回 nvarchar 。 否则,将返回 varchar。 返回类型的长度与字符串参数的长度相同。
如果 enable_ordinal 参数传递的值为 1,则返回第二个名为 ordinal 的列,其中包含每个子字符串在输入字符串中的位置(从 1 开始的索引值)。 返回类型为 bigint。
sql
SELECT ...
FROM table1
CROSS APPLY (table_expression) AS alias
CROSS APPLY
是 SQL 中的一个联接操作,它允许你将一个表(或表达式的结果集)与另一个表(或表达式的结果集)进行联接。与普通的 JOIN
操作不同的是,CROSS APPLY
会对左表的每一行都执行右表(或表达式)的计算,并将结果集展开为多行。这种操作特别适用于需要对左表的某一列(通常是包含复杂数据或需要计算的列)进行逐行处理并生成多行结果的场景。
例如
sql
SELECT
e.EmployeeID,
e.EmployeeName,
s.value AS Skill
FROM
Employees e
CROSS APPLY
STRING_SPLIT(e.Skills, ',') s