Skip to content

Splitting and joining strings ​

These functions split text into arrays or rows and join array members back into text. Choose literal-delimiter functions when the separator is fixed, and regular-expression variants when the separator is a pattern.

Empty separators, NULL inputs and NULL array members have function-specific behavior. array_to_string can supply an explicit replacement for missing members.

Example: Changing a list separator ​

sql
SELECT array_to_string(string_to_array('Ada,Grace,Linus', ','), ' | ')
FORMAT csv;
text
"Ada | Grace | Linus"

array_to_string ​

Join native array members in depth-first order, skipping NULL unless a replacement is supplied.

Syntax ​

text
array_to_string(array, delimiter[, null_string])

Arguments ​

Native Array, delimiter text, optional NULL-member replacement; nested arrays are flattened.

Returned value ​

TEXT; empty array gives empty text; NULL array or delimiter gives NULL.

Example ​

sql
SELECT array_to_string(array(1,NULL,2),',','?') FORMAT csv;
text
"1,?,2"

regexp_split_to_array ​

Split text into native text fields using a Unicode regex delimiter.

Syntax ​

text
regexp_split_to_array(text, pattern[, flags])

Arguments ​

Existing regex syntax/flags; ignore zero-length delimiters at endpoints and immediately after a preceding match; captures are excluded.

Returned value ​

Native Array(String); empty source produces one empty field; NULL propagates.

Example ​

sql
SELECT array_to_string(regexp_split_to_array('a b c',' +'),'|') FORMAT csv;
text
"a|b|c"

regexp_split_to_table ​

Split text into rows using the documented delimiter rules.

Syntax ​

text
FROM regexp_split_to_table(text, pattern[, flags])

Arguments ​

Same separators and flags as regexp_split_to_array; any NULL argument emits no rows.

Returned value ​

One TEXT field per row in column regexp_split_to_table; FROM-only.

Example ​

sql
SELECT * FROM regexp_split_to_table('a,b',',') FORMAT csv;
text
"a"
"b"

split_part ​

Return one delimiter-separated field from text.

Syntax ​

text
split_part(value, delimiter, field)

Arguments ​

Positive fields count from one; negative fields count from the last field; zero raises INVALID_ARGUMENT. Empty delimiter leaves one field.

Returned value ​

Field TEXT, empty TEXT when missing, or NULL for any NULL argument.

Example ​

sql
SELECT split_part('a::b::c','::',2) FORMAT csv;
text
"b"

string_to_array ​

Split text into a native Array(String), replacing exact null_string fields with NULL.

Syntax ​

text
string_to_array(text, delimiter[, null_string])

Arguments ​

NULL delimiter splits Unicode characters; empty delimiter retains one field; empty input gives an empty array.

Returned value ​

Native text array; nullable members when a non-NULL null_string is supplied; NULL for NULL input.

Example ​

sql
SELECT array_to_string(string_to_array('a,b,c',','),'|') FORMAT csv;
text
"a|b|c"

string_to_table ​

Split text into rows using the documented delimiter rules.

Syntax ​

text
FROM string_to_table(text,delimiter[,null_string])

Arguments ​

NULL delimiter splits Unicode characters; empty delimiter keeps the whole nonempty input; optional marker yields SQL NULL; empty source yields zero rows.

Returned value ​

One string_to_table column containing nullable TEXT.

Example ​

sql
SELECT * FROM string_to_table('a,b',',') FORMAT csv;
text
"a"
"b"