Categories: Varia

New Argument for STRING_SPLIT Function

A new (optional) argument has been added to STRING_SPLIT: enable_ordinal. Setting it to 1 will add an output column with the 1-based index of each item of the array. Nice. This is great if you want to preserve the order of the items. Let’s illustrate with an example:

SELECT *
FROM STRING_SPLIT('Hello,World,this,is,an,array',',');

This returns the following result:

As you can see, the order is the same as in the input string, but this is not guaranteed! It’s exactly the same as relying on indexes for your sorted output: not explicitly guaranteed until you use an ORDER BY. The tricky thing with this function is, there’s nothing to sort on if you explicitly want to reserve the order. To work around this, I typically used a user-defined function written by Jeff Moden, as explained in this infamous article about tally tables: Tally OH! An Improved SQL 8K “CSV Splitter” Function. Jeff’s function returns an ordinal column and thus you can sort the output.

Microsoft has now added such an ordinal column as well to the built-in STRING_SPLIT function. Hoozah.

SELECT *
FROM STRING_SPLIT('Hello,World,this,is,an,array',',',1)
ORDER BY ordinal;

The sad part is that this change is for the moment only available in the Azure databases (Azure SQL DB, Azure Managed Instance and Azure Synapse Analytics Serverless).

Aaron Bertrand was the first to break the news (at least that I’m aware of) in his blog post 2021 : The Year of the Exodus, but since it was kind of a footnote and I thought it deserved it’s own post 🙂


------------------------------------------------
Do you like this blog post? You can thank me by buying me a beer 🙂
Koen Verbeeck

Koen Verbeeck is a Microsoft Business Intelligence consultant at AE, helping clients to get insight in their data. Koen has a comprehensive knowledge of the SQL Server BI stack, with a particular love for Integration Services. He's also a speaker at various conferences.

View Comments

  • Thanks for the honorable mention, Koen.

    The really sad part about all of this is them originally releasing the function without this feature. It should have been included since day 1.

Recent Posts

Techorama 2024 – Slides

You can find the slidedeck for my Techorama session "Microsoft Fabric for Dummies" on github.

1 week ago

Webinar – Microsoft Fabric for Dummies

On Wednesday May 15th 2024 I will give a free webinar on MSSQLTips.com about Microsoft…

2 weeks ago

Get row counts of all tables in a Microsoft Fabric warehouse

I loaded some built-in sample data from Wide World Importers into a Fabric warehouse. You…

2 weeks ago

dataMinds Saturday 2024 – Session Materials

It was great being at dataMinds Saturday 2024 this past weekend. A great crowd of…

3 weeks ago

Check your regions people

Today I was having a nice discussion with some colleagues about Fabric and pricing/licensing came…

1 month ago

Book Review – Deciphering Data Architectures

I recently purchased and read the book Deciphering Data Architectures - Choosing Between a Modern…

1 month ago