string
POSITION / INSTR
Returns the 1-based index of the first occurrence of substr in string, or 0 if not found. POSITION is SQL-standard (Postgres/MySQL); INSTR is the MySQL/SQLite shorthand.
POSITION(substr IN string) | INSTR(string, substr) Parameters / Modifiers
| Parameter | Purpose |
|---|---|
| STRPOS | Postgres alias for POSITION with reversed argument order |
| LOCATE(sub, str, start) | MySQL variant that accepts a starting offset |
| NULLIF(..., 0) | Common wrapper to convert 'not found' 0 into NULL |
Examples
SELECT POSITION('@' IN '[email protected]'); Returns 4
SELECT INSTR('[email protected]', '@'); Same result, MySQL/SQLite/Oracle syntax
SELECT STRPOS('hello world', 'world'); Postgres helper — returns 7
SELECT LOCATE('l', 'hello world', 5); MySQL: search starting at position 5, returns 10
Dialect notes / Gotcha
Returns 0 (not NULL) when the substring is missing — combine with NULLIF(POSITION(...), 0) if you want NULL. INSTR argument order is reversed vs POSITION (string first, then needle).
Related functions
SUBSTRING
Extracts a substring by 1-based start position and optional length. All three dialects support the comma-argument form; Postgres also accepts the SQL-standard FROM/FOR clauses and POSIX regex extraction.
LENGTH / CHAR_LENGTH
Returns the number of characters in a string (CHAR_LENGTH) or the number of bytes (LENGTH in MySQL). Postgres and SQLite LENGTH return character count for text, matching CHAR_LENGTH.
LEFT / RIGHT
LEFT returns the first n characters, RIGHT returns the last n characters. Available in Postgres and MySQL. SQLite has no LEFT/RIGHT — use SUBSTR(s, 1, n) for LEFT and SUBSTR(s, -n) for RIGHT.35+; a portable fallback is SUBSTRING(str, 1, n) or SUBSTRING(str, LENGTH(str)-n+1).
CONCAT
Joins two or more strings end-to-end and returns a single string. CONCAT is portable across MySQL, Postgres 9.1+, and SQLite 3.44+; the standard || operator works in Postgres and SQLite but not MySQL unless PIPES_AS_CONCAT is set.
REPLACE
Replaces every occurrence of from_str inside source with to_str. Case-sensitive in Postgres and SQLite; MySQL follows the column's collation.
← All SQL functions · SQL cheat sheet · Window functions · PostgreSQL cheat sheet