SQL CHARINDEX Function: 4 Use Cases & Examples

by | SQL

When working with databases, being able to efficiently locate specific sequences of characters within larger strings is crucial.

The CHARINDEX function in SQL serves as a valuable tool for this purpose, allowing you to find the starting position of a specified substring within a string.

SQL’s CHARINDEX is a built-in function designed to locate the position of a specified substring within a larger string.

By returning the starting position of the first occurrence of the substring, it aids in various string manipulation tasks. If the substring isn’t found, CHARINDEX returns a value of 0.

In this article, we’ll take an in-depth look at SQL’s CHARINDEX function.

From its fundamental syntax to real-world applications, we’ll explore how this tool aids in pinpointing specific character sequences within strings.

Let’s start learning!


SQL charindex

Understanding the core mechanics of SQL functions is pivotal for data analysis.

In this section, we’ll demystify the CHARINDEX function, diving into its definition, breaking down its syntax, and explaining the significance of its return values.

The CHARINDEX function is designed to search for a specific sequence of characters (or substring) within a larger string.

Its primary purpose is to return the starting position of the first occurrence of the specified substring. If the substring isn’t found, CHARINDEX will return a value of 0.

This makes it a vital tool for various string manipulation tasks in SQL.

The basic structure of the CHARINDEX function is as follows:

CHARINDEX(substring, string, [start_position])

Each parameter serves a distinct purpose:

  • substring: This is the sequence of characters you’re searching for.
  • string: This is the string in which you want to search.
  • start_position: Optional parameter. This is the position in the string where you want to begin your search. If omitted, the search starts at the beginning of the string.
The syntax CHARINDEX() function

Consider an example: A dataset with a column of full emails needs the domain of the email in each entry.

The CHARINDEX function can be used if the domain is separated from the email by an @:

Example of SQL server CHARINDEX

This query returns the @ position in each email entry, giving you the domain name’s starting position.

The CHARINDEX function returns an integer value.

This integer represents the starting position of the first occurrence of the substring within the string. If the substring is not found, the function will return a value of 0.

This return value is crucial as it not only informs you about the presence of the substring but also its exact location, enabling precise data manipulation.

Now that you’ve gained a foundational understanding of the CHARINDEX function, its syntax, and its return values, you’re well-equipped to implement it in your SQL operations.

In the next section, we’ll take a look at practical examples and real-world use cases, showcasing the true power and versatility of CHARINDEX.

4 Examples and Use Cases of CHARINDEX in SQL

The true utility of any function is best understood when seen in action.

In this section, we’ll walk through various examples and scenarios where CHARINDEX proves invaluable.

By exploring its application in different contexts, you’ll gain a deeper appreciation for its versatility and practicality.

1. Finding a Substring Within a String

Suppose you want to find the position of the word “test” in the string “This is a test”. Using CHARINDEX, the query would look like this:

CHARINDEX function searches for test in string expression

This query returns 11 since “test” starts at the 11th position of the string.

By default, CHARINDEX is case-insensitive.

We’ll take a look at how to make case-sensitive searches in the next section.

2. Replacing a String

The STUFF function in SQL is used to replace a part of a string with another string. When combined with CHARINDEX, you can locate a specific substring within a string and then replace it with another substring using STUFF.

For example, in the string “This is a test”, we can replace “test” with “example” as follows:

Select charindex to search and replace specified character


  • The CHARINDEX function finds the starting position of “test”, which is 10.
  • The LEN function determines the length of the word “test”, which is 4.
  • The STUFF function then replaces the 4 characters starting from position 10 with the word “example”.

In this query, the CHARINDEX function finds “test” in the string and replaces it with “example”. This query returns “This is an example”.

3. Using the Optional “start_position” Parameter

Imagine you have the string “apple pie and apple tart.”

You want to find the position of the second occurrence of “apple.”

By using the start_location parameter, you can skip the first occurrence:

Using optional start_position to find string value position

This would return 17, pointing to the start of the second “apple.”

4. Real-World Scenarios

1. Email Validation

To check if a string has the “@” symbol, which is essential for email addresses:

Checking if literal string has @ or charindex returns null value


  • CHARINDEX(‘@’, email_column) searches for the “@” symbol in the email_column of the Users table.
  • If the “@” symbol is found, CHARINDEX will return a position greater than 0.
  • The CASE statement then checks this position:
    • If it’s greater than 0, the email is labeled as ‘Valid’.
    • Otherwise, it’s labeled as ‘Invalid’.
  • The result will be a list of email statuses (either ‘Valid’ or ‘Invalid’) for each email in the Users table.

2. Extracting Domain from URL

If you have a column of URLs and want to extract the domain name:

Using charindex with index position to perform case sensitive search


  • The goal is to extract the domain name from URLs that are structured like “http://domain.com/path”.
  • CHARINDEX(‘://’, url_column) finds the position of “://” in the URL.
  • We add 3 to this position to get the starting point of the domain name (right after “://”).
  • The inner SUBSTRING function extracts the portion of the URL starting from the domain name.
  • The second CHARINDEX then finds the position of the first “/” in this extracted portion, which indicates the end of the domain name.
  • Finally, the outer SUBSTRING function extracts the domain name using the starting position (after “://”) and the length (up to the first “/”).
  • The result will be a list of domain names extracted from the URLs in the Websites table.

These examples illustrate just a fraction of the myriad ways CHARINDEX can be employed in real-world database operations.

Whether you’re performing basic string manipulations or more intricate data transformations, CHARINDEX stands as a robust tool in your SQL toolkit.

How to Handle Case Sensitivity in CHARINDEX

In the intricate world of SQL, the nuances of case sensitivity can sometimes lead to unexpected results, especially when working with string functions.

SQL databases operate under collations, which are sets of rules that determine how strings are compared and sorted.

Collations play a pivotal role in determining whether string comparisons, like those done by CHARINDEX, are case-sensitive or case-insensitive.

By default, CHARINDEX respects the collation of the database or column it’s working with. This means:

  • If the collation is case-sensitive (e.g., SQL_Latin1_General_CP1_CS_AS), CHARINDEX will be case-sensitive.
  • If it’s case-insensitive (e.g., SQL_Latin1_General_CP1_CI_AS), CHARINDEX will be case-insensitive.

1. Forcing Case-Insensitive Searches

If you’re unsure about the collation or want to ensure a case-insensitive search regardless of the database’s settings, you can use the LOWER() or UPPER() functions:

How to use charindex function case sensitive search for first position

By converting both the substring and the main string to lowercase (or uppercase), you ensure that the search is case-insensitive.

2. Forcing Case-Sensitive Searches

Even in a case-insensitive collation, you might occasionally need a case-sensitive search.

You can achieve this by explicitly casting the strings to a case-sensitive collation.

By applying the COLLATE clause with a case-sensitive collation, the search becomes case-sensitive, ensuring that “Test” and “TEST” are treated as distinct substrings.

COLLATE followed by a specified collation type does a case-sensitive search.

The following example shows how Latin1_General_CS_AS collation allows case-sensitive Latin character searches:

Using CHARINDEX to collate latin1_general_cs_as

It returns the position of the substring ‘Test’ with the precise case match in the searched string.

Output of charindex is specific position of substring found

By knowing the difference between case-sensitive and case-insensitive searches, you can use CHARINDEX in SQL queries to discover substrings in the desired case.

Final Thoughts

Understanding a versatile tool like CHARINDEX can initially seem daunting.

However, as we’ve journeyed through its syntax, real-world applications, and nuances like case sensitivity, it becomes evident that all it takes is a bit of practice and understanding.

CHARINDEX’s ability to pinpoint substrings within larger strings, combined with other SQL functions, opens up a world of possibilities for data manipulation and retrieval.

Don’t be afraid to experiment with CHARINDEX, integrate it into your SQL tasks, and learn from both successes and pitfalls.

We hope this guide has provided valuable insights and techniques to enhance your data manipulation prowess.

If you’d like to learn more about how to use SQL functions, particularly in Power BI and DAX, check out the video below:

Frequently Asked Questions

How does CHARINDEX work in SQL?

CHARINDEX is a function in SQL Server that searches for a specified substring within a given string and returns the starting position of the substring if found.

The position returned is 1- based instead of 0 -based.

The syntax for CHARINDEX is as follows:


The function takes 3 parameters:

  1. substring: The substring to search for.
  2. string: The full string to search within.
  3. start_position: An optional starting position for the search.

Can CHARINDEX be used in a WHERE clause?

Yes, you can use CHARINDEX in a WHERE clause.

For instance, you can filter records that contain a specific substring within a particular column by using CHARINDEX in the WHERE clause, like this:

FROM your_table
WHERE CHARINDEX('substring', column_name) > 0;

This query will return all rows where the specified substring is found within the column_name.

Is CHARINDEX case-sensitive in SQL?

By default, CHARINDEX is not case-sensitive.

However, if case-sensitive collation is enabled in your SQL Server, the CHARINDEX search will be case-sensitive as well.

To perform a case-sensitive search, use the COLLATE keyword:


What is the equivalent of CHARINDEX in Oracle?

Oracle does not have a CHARINDEX function, but you can use the INSTR function to achieve the same purpose.

The syntax for INSTR is:

INSTR(string, substring, start_position, occurrence)

The function takes 4 parameters:

  1. string: The full string to search within.
  2. substring: The substring to search for.
  3. start_position: An optional starting position for the search.
  4. occurrence: An optional parameter to find the nth occurrence of the substring in the string.

How to compare CHARINDEX with SUBSTRING() in SQL?

Different functions for CHARINDEX and SUBSTRING.

SUBSTRING extracts a substring depending on its starting position and length, while CHARINDEX searches for its starting position.

The CHARINDEX function can locate the starting location of a substring and feed it to the SUBSTRING function:


In summary, CHARINDEX finds the starting place of a substring, while SUBSTRING extracts sections of a string based on position and length.

Related Posts