What does the POSITION function do in Snowflake?

POSITION in Snowflake, also known as CHARINDEX in other databases, is a simple function that finds the location of a substring within a larger string.

Syntax:

POSITION(<substring>, <string> [, <start_position>])
  • substring: the text you want to find
  • string: the text you want to search within
  • start_position: where to start searching from (optional, defaults to 1)

Note: POSITION returns the position of the first occurrence of the substring. If the substring isn't found, it returns 0. Position counting starts at 1, not 0.

Alternative Syntax: Snowflake also supports SQL standard syntax:

POSITION(<substring> IN <string>)

Example 1: Finding a character

SELECT POSITION('@', 'user@email.com');
-- Result: 5

Example 2: Finding a word

SELECT POSITION('flake' IN 'Snowflake');
-- Result: 5

Example 3: Substring not found

SELECT POSITION('xyz' IN 'Snowflake');
-- Result: 0

Pairing up with SUBSTR to make it dynamic

While POSITION is powerful on its own, it becomes even more useful when combined with SUBSTR. This allows you to dynamically extract substrings based on the location of specific characters or patterns, rather than hardcoding position numbers.

Example: Extracting everything after a delimiter

Let's say you have a table with email addresses and want to extract just the domain:

SELECT 
  email,
  SUBSTR(email, POSITION('@', email) + 1) AS domain
FROM emails;

Result:

email                    | domain
-------------------------|-------------
john.doe@company.com     | company.com
jane.smith@tech.io       | tech.io
bob.jones@startup.co     | startup.co

Example: Extracting everything before a delimiter

Now let's extract just the username (everything before the @):

SELECT 
  email,
  SUBSTR(email, 1, POSITION('@', email) - 1) AS username
FROM emails;

Result:

email                    | username
-------------------------|------------
john.doe@company.com     | john.doe
jane.smith@tech.io       | jane.smith
bob.jones@startup.co     | bob.jones

By combining POSITION with SUBSTR, you can handle real-world data that doesn't follow a fixed format, making your queries more flexible and maintainable.

Author:
Rosh Khan
Powered by The Information Lab
1st Floor, 25 Watling Street, London, EC4M 9BR
Subscribe
to our Newsletter
Get the lastest news about The Data School and application tips
Subscribe now
© 2025 The Information Lab