strpos()

Returns first starting index of the specified substring within string, or zero if it's not present. (Same as position(substring in string), but note the reversed argument order.)

Signature

strpos ( string text, substring text ) → integer

Examples

SELECT strpos('high', 'ig');
2

Run against PostgreSQL 18.6 on 2026-09-13. This is the output we got, not the documentation’s.

In other engines

PostgreSQLstrpos
MySQLLOCATE(needle, haystack) or INSTR(haystack, needle)
SQL ServerCHARINDEX(needle, haystack)
OracleINSTR(haystack, needle)
SQLiteinstr(haystack, needle)

The argument order flips between the LOCATE and INSTR families, which is why a ported query returns 0 instead of erroring — it looked for the haystack inside the needle and honestly did not find it.

Want to run this against your own PostgreSQL server from an iPhone, iPad or Mac? These are ours — every connection goes straight from the device to your database, with no account and no server of ours in between.

Signature and description adapted from the PostgreSQL manual, used under the PostgreSQL License. PostgreSQL is a registered trademark of the PostgreSQL Community Association of Canada. This page is not affiliated with the PostgreSQL Global Development Group.