SQL 函数参考
PostgreSQL、MySQL、SQLite 和 SQL Server 的 SQL 函数可搜索参考,支持按类别和方言筛选。
Returns the number of characters in a string.
语法
LENGTH(string)返回
INTEGER示例
SELECT LENGTH('hello') -- 5MSSQLLEN — Does not count trailing spaces
Converts all characters in a string to uppercase.
语法
UPPER(string)返回
TEXT示例
SELECT UPPER('hello') -- 'HELLO'Converts all characters in a string to lowercase.
语法
LOWER(string)返回
TEXT示例
SELECT LOWER('HELLO') -- 'hello'Extracts a substring starting at position start (1-indexed). Optional length limits characters returned.
语法
SUBSTRING(string FROM start [FOR length])返回
TEXT示例
SELECT SUBSTRING('hello world' FROM 7 FOR 5) -- 'world'SQLiteSUBSTR
MySQLMID — Alias for SUBSTRING
Concatenates two or more strings together.
语法
CONCAT(string1, string2, ...)返回
TEXT示例
SELECT CONCAT('hello', ' ', 'world') -- 'hello world'SQLite|| — Use || operator
Concatenates strings with a separator, skipping NULL values.
语法
CONCAT_WS(separator, string1, string2, ...)返回
TEXT示例
SELECT CONCAT_WS(', ', 'Alice', NULL, 'Bob') -- 'Alice, Bob'Replaces all occurrences of a substring with another string.
语法
REPLACE(string, from, to)返回
TEXT示例
SELECT REPLACE('hello world', 'world', 'SQL') -- 'hello SQL'Removes leading and/or trailing characters (default: spaces) from a string.
语法
TRIM([LEADING | TRAILING | BOTH] [chars] FROM string)返回
TEXT示例
SELECT TRIM(' hello ') -- 'hello'SQLLTRIM — Leading spaces only
SQLRTRIM — Trailing spaces only
Returns the position of the first occurrence of a substring (1-indexed, 0 if not found).
语法
INSTR(string, substring)返回
INTEGER示例
SELECT INSTR('hello world', 'world') -- 7PGPOSITION
MSSQLCHARINDEX
Returns the leftmost n characters of a string.
语法
LEFT(string, n)返回
TEXT示例
SELECT LEFT('hello world', 5) -- 'hello'SQLiteSUBSTR
Returns the rightmost n characters of a string.
语法
RIGHT(string, n)返回
TEXT示例
SELECT RIGHT('hello world', 5) -- 'world'Returns a string repeated count times.
语法
REPEAT(string, count)返回
TEXT示例
SELECT REPEAT('ab', 3) -- 'ababab'MSSQLREPLICATE
Returns the string with characters in reverse order.
语法
REVERSE(string)返回
TEXT示例
SELECT REVERSE('hello') -- 'olleh'Pads a string on the left to a total length using the fill character.
语法
LPAD(string, length, fill)返回
TEXT示例
SELECT LPAD('42', 5, '0') -- '00042'MSSQLRIGHT + REPLICATE
Pads a string on the right to a total length using the fill character.
语法
RPAD(string, length, fill)返回
TEXT示例
SELECT RPAD('hi', 5, '.') -- 'hi...'Splits a string by delimiter and returns the nth field (1-indexed).
语法
SPLIT_PART(string, delimiter, n)返回
TEXT示例
SELECT SPLIT_PART('a,b,c', ',', 2) -- 'b'MySQLSUBSTRING_INDEX
Replaces substrings matching a regular expression with a replacement string.
语法
REGEXP_REPLACE(string, pattern, replacement)返回
TEXT示例
SELECT REGEXP_REPLACE('abc123', '[0-9]+', 'N') -- 'abcN'MSSQLNot built-in — Requires CLR or workaround
Returns the current date and time (including timezone in PostgreSQL).
语法
NOW()返回
TIMESTAMP示例
SELECT NOW() -- 2024-06-15 14:30:00
MSSQLGETDATE — No timezone
Returns the current date without a time component.
语法
CURRENT_DATE返回
DATE示例
SELECT CURRENT_DATE -- 2024-06-15
MySQLCURDATE
Adds a time interval to a date or timestamp.
语法
DATE_ADD(date, INTERVAL n unit)返回
DATE / TIMESTAMP示例
SELECT DATE_ADD('2024-01-01', INTERVAL 7 DAY) -- '2024-01-08'PG+
MSSQLDATEADD
SQLiteDATE
Returns the number of days between two dates.
语法
DATEDIFF(date1, date2)返回
INTEGER示例
SELECT DATEDIFF('2024-01-31', '2024-01-01') -- 30PGSubtraction — Returns INTERVAL or days as INTEGER
MSSQLDATEDIFF
SQLiteJULIANDAY
Extracts a specific date/time part (YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, WEEK, DOW).
语法
EXTRACT(part FROM date)返回
NUMERIC示例
SELECT EXTRACT(YEAR FROM NOW()) -- 2024
MSSQLDATEPART
Truncates a timestamp to the specified precision (year, month, day, hour, minute, etc.).
语法
DATE_TRUNC('unit', timestamp)返回
TIMESTAMP示例
SELECT DATE_TRUNC('month', NOW()) -- 2024-06-01 00:00:00MySQLDATE_FORMAT — Workaround for month truncation
MSSQLDATETRUNC — SQL Server 2022+
Formats a date, timestamp, or number as a string using a format pattern.
语法
TO_CHAR(value, 'format')返回
TEXT示例
SELECT TO_CHAR(NOW(), 'YYYY-MM-DD') -- '2024-06-15'
MySQLDATE_FORMAT
MSSQLFORMAT
SQLiteSTRFTIME
Returns the interval between two timestamps expressed in years, months, and days.
语法
AGE(timestamp1, timestamp2)返回
INTERVAL示例
SELECT AGE('2024-06-15', '2000-03-01') -- '24 years 3 months 14 days'Returns the absolute (non-negative) value of a number.
语法
ABS(number)返回
same as input示例
SELECT ABS(-42) -- 42
Rounds a number to the specified number of decimal places (default 0).
语法
ROUND(number [, decimals])返回
NUMERIC示例
SELECT ROUND(3.14159, 2) -- 3.14
Rounds a number up to the nearest integer.
语法
CEIL(number)返回
INTEGER示例
SELECT CEIL(4.2) -- 5
MSSQLCEILING
Rounds a number down to the nearest integer.
语法
FLOOR(number)返回
INTEGER示例
SELECT FLOOR(4.9) -- 4
Returns the remainder after division.
语法
MOD(dividend, divisor)返回
same as input示例
SELECT MOD(10, 3) -- 1
SQLite%
MSSQL%
Returns base raised to the power of exponent.
语法
POWER(base, exponent)返回
NUMERIC示例
SELECT POWER(2, 10) -- 1024
SQLiteNot built-in — Use ROUND(EXP(exponent*LN(base)), 10) workaround
Returns the square root of a non-negative number.
语法
SQRT(number)返回
NUMERIC示例
SELECT SQRT(16) -- 4
Returns the largest value from a list of expressions.
语法
GREATEST(value1, value2, ...)返回
same as inputs示例
SELECT GREATEST(3, 1, 4, 1, 5) -- 5
MSSQLNot built-in — Use CASE WHEN or VALUES workaround
Returns the smallest value from a list of expressions.
语法
LEAST(value1, value2, ...)返回
same as inputs示例
SELECT LEAST(3, 1, 4, 1, 5) -- 1
Returns a random floating-point value between 0.0 and 1.0.
语法
RANDOM()返回
FLOAT示例
SELECT RANDOM() -- 0.7381924...
MySQLRAND
MSSQLRAND
Returns -1 for negative numbers, 0 for zero, and 1 for positive numbers.
语法
SIGN(number)返回
INTEGER示例
SELECT SIGN(-42) -- -1
Counts rows. COUNT(*) counts all rows; COUNT(col) skips NULLs; DISTINCT counts unique non-null values.
语法
COUNT(*) | COUNT(column) | COUNT(DISTINCT column)返回
BIGINT示例
SELECT COUNT(*) FROM users -- 150
Returns the sum of non-null numeric values.
语法
SUM(expression)返回
NUMERIC示例
SELECT SUM(amount) FROM orders -- 42000.00
Returns the arithmetic mean of non-null values.
语法
AVG(expression)返回
NUMERIC示例
SELECT AVG(score) FROM results -- 87.5
Returns the minimum non-null value in the group.
语法
MIN(expression)返回
same as input示例
SELECT MIN(created_at) FROM orders -- 2023-01-01
Returns the maximum non-null value in the group.
语法
MAX(expression)返回
same as input示例
SELECT MAX(score) FROM results -- 100
Concatenates non-null string values from a group with a delimiter.
语法
STRING_AGG(expression, delimiter)返回
TEXT示例
SELECT STRING_AGG(name, ', ') FROM users -- 'Alice, Bob, Eve'
MySQLGROUP_CONCAT
Collects values from a group into an array (PostgreSQL) or JSON array.
语法
ARRAY_AGG(expression [ORDER BY ...])返回
ARRAY示例
SELECT ARRAY_AGG(id ORDER BY id) FROM users -- {1,2,3}MySQLJSON_ARRAYAGG
Returns TRUE if all non-null input values are true.
语法
BOOL_AND(expression)返回
BOOLEAN示例
SELECT BOOL_AND(active) FROM users -- false
MySQLBIT_AND workaround — Use MIN(active = 1) as workaround
Assigns a unique sequential integer to each row within a partition, starting at 1.
语法
ROW_NUMBER() OVER ([PARTITION BY ...] ORDER BY ...)返回
BIGINT示例
SELECT ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC) AS rn FROM employees
Assigns a rank to each row; ties share the same rank and leave gaps in sequence.
语法
RANK() OVER ([PARTITION BY ...] ORDER BY ...)返回
BIGINT示例
SELECT RANK() OVER (ORDER BY score DESC) AS rnk FROM results
Like RANK but without gaps: tied rows share the same rank and the next rank is consecutive.
语法
DENSE_RANK() OVER ([PARTITION BY ...] ORDER BY ...)返回
BIGINT示例
SELECT DENSE_RANK() OVER (ORDER BY score DESC) FROM results
Returns the value from a row that is offset rows before the current row.
语法
LAG(expression [, offset [, default]]) OVER ([PARTITION BY ...] ORDER BY ...)返回
same as expression示例
SELECT LAG(revenue) OVER (ORDER BY month) AS prev_revenue FROM sales
Returns the value from a row that is offset rows after the current row.
语法
LEAD(expression [, offset [, default]]) OVER ([PARTITION BY ...] ORDER BY ...)返回
same as expression示例
SELECT LEAD(revenue) OVER (ORDER BY month) AS next_revenue FROM sales
Divides rows into n roughly equal groups (tiles) and returns the tile number for each row.
语法
NTILE(n) OVER ([PARTITION BY ...] ORDER BY ...)返回
INTEGER示例
SELECT NTILE(4) OVER (ORDER BY score) AS quartile FROM results
Returns the value of expression from the first row of the window frame.
语法
FIRST_VALUE(expression) OVER ([PARTITION BY ...] ORDER BY ...)返回
same as expression示例
SELECT FIRST_VALUE(salary) OVER (PARTITION BY dept ORDER BY salary DESC) FROM employees
Returns the value from the last row of the window frame. Requires explicit ROWS BETWEEN clause for meaningful results.
语法
LAST_VALUE(expression) OVER ([PARTITION BY ...] ORDER BY ... ROWS BETWEEN ... AND CURRENT ROW)返回
same as expression示例
SELECT LAST_VALUE(salary) OVER (PARTITION BY dept ORDER BY salary ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM employees
Returns the relative rank of a row as a fraction between 0 and 1.
语法
PERCENT_RANK() OVER ([PARTITION BY ...] ORDER BY ...)返回
FLOAT示例
SELECT PERCENT_RANK() OVER (ORDER BY score) FROM results
Returns the first non-null value from the list. Short-circuits once a non-null is found.
语法
COALESCE(value1, value2, ...)返回
same as inputs示例
SELECT COALESCE(NULL, NULL, 'fallback') -- 'fallback'
Returns NULL if value1 equals value2; otherwise returns value1. Useful to avoid division-by-zero.
语法
NULLIF(value1, value2)返回
same as value1示例
SELECT total / NULLIF(divisor, 0) FROM sales
Evaluates conditions in order and returns the result for the first true condition. Equivalent to if-else.
语法
CASE WHEN condition THEN result [...] [ELSE default] END返回
same as result expressions示例
SELECT CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' ELSE 'C' END FROM results
Short form of CASE WHEN: returns true_value if condition is true, otherwise false_value.
语法
IIF(condition, true_value, false_value)返回
same as true/false expressions示例
SELECT IIF(active = 1, 'Active', 'Inactive') FROM users
MySQLIF
Converts a value to the specified data type. Standard SQL syntax supported by all major databases.
语法
CAST(expression AS type)返回
specified type示例
SELECT CAST('42' AS INTEGER) -- 42PG:: — PostgreSQL shorthand
Converts a value to the specified type. Dialect varies: MySQL/SQL Server have CONVERT; PostgreSQL prefers CAST.
语法
CONVERT(type, expression)返回
specified type示例
SELECT CONVERT(INT, '42') -- 42
Parses a string into a DATE using the specified format pattern.
语法
TO_DATE(string, 'format')返回
DATE示例
SELECT TO_DATE('15-Jun-2024', 'DD-Mon-YYYY') -- 2024-06-15MySQLSTR_TO_DATE
MSSQLPARSE
Converts a formatted string to a numeric value.
语法
TO_NUMBER(string, 'format')返回
NUMERIC示例
SELECT TO_NUMBER('1,234.56', '9,999.99') -- 1234.56MySQLCAST + REPLACE — CAST(REPLACE('1,234.56', ',', '') AS DECIMAL)
MSSQLPARSE
Extracts a value from a JSON document at the specified path.
语法
JSON_EXTRACT(json, path)返回
JSON / scalar示例
SELECT JSON_EXTRACT('{"name":"Alice"}', '$.name') -- "Alice"PG-> — Use ->> for text
MSSQLJSON_VALUE — Returns scalar only
PostgreSQL operator: extracts a JSON sub-object or array element. Use ->> to get a text value.
语法
json_col -> 'key'返回
JSON示例
SELECT data -> 'address' -> 'city' FROM users
PG->> — Returns text, not JSON
Creates a JSON object from key-value pairs.
语法
JSON_OBJECT(key, value [, key, value ...])返回
JSON示例
SELECT JSON_OBJECT('name', 'Alice', 'age', 30) -- {"name":"Alice","age":30}PGjsonb_build_object
Creates a JSON array from the provided values.
语法
JSON_ARRAY(value1, value2, ...)返回
JSON示例
SELECT JSON_ARRAY(1, 'two', true) -- [1,"two",true]
PGjson_build_array
Aggregates values as a JSON array. Useful with GROUP BY to collect related rows.
语法
JSON_AGG(expression)返回
JSON示例
SELECT dept, JSON_AGG(name) FROM employees GROUP BY dept
MySQLJSON_ARRAYAGG
Expands a JSON object into a set of (key, value) rows. Used in FROM clause.
语法
JSON_EACH(json)返回
TABLE(key TEXT, value JSON)示例
SELECT key, value FROM JSON_EACH('{"a":1,"b":2}')PGjson_each
MSSQLOPENJSON
PostgreSQL: creates a JSONB object from key-value pairs. Prefer over json_build_object when working with JSONB columns.
语法
JSONB_BUILD_OBJECT(key, value [, ...])返回
JSONB示例
SELECT JSONB_BUILD_OBJECT('id', id, 'name', name) FROM users68 functions