常见SQL函数使用
(注意:不同的数据库类型使用的语法不同)
以下是MySQL和PostgreSQL在实现替换、抽取、拼接、分列四个常见字符串操作功能时的核心区别总结,按功能分类对比:
1. 替换(Replace)
功能描述 | MySQL | PostgreSQL | 关键区别 |
---|---|---|---|
简单替换 | REPLACE(str, old_str, new_str) | REPLACE(str, old_str, new_str) | 语法相同 |
正则替换 | REGEXP_REPLACE(str, pattern, repl) | REGEXP_REPLACE(str, pattern, repl) | PostgreSQL支持更强大的正则引擎 |
示例 | SELECT REPLACE('abc', 'a', 'X'); → Xbc | SELECT REGEXP_REPLACE('a1b2', '\d', 'X'); → aXbX | PostgreSQL正则语法更灵活 |
2. 抽取(Extract)
功能描述 | MySQL | PostgreSQL | 关键区别 |
---|---|---|---|
子串截取 | SUBSTRING(str, start, length) SUBSTR(str, start, length) | SUBSTRING(str FROM start FOR length) | PostgreSQL语法更接近SQL标准 |
正则抽取 | REGEXP_SUBSTR(str, pattern) | SUBSTRING(str FROM pattern) | PostgreSQL直接集成正则到SUBSTRING |
示例 | SELECT SUBSTRING('Hello', 2, 3); → ell | SELECT SUBSTRING('a1b2' FROM '\d+'); → 1 | PostgreSQL支持正则抽取更简洁 |
3. 拼接(Concatenation)
功能描述 | MySQL | PostgreSQL | 关键区别 |
---|---|---|---|
多字符串拼接 | CONCAT(str1, str2, ...) 自动忽略NULL | CONCAT(str1, str2, ...) NULL参与返回NULL 或用 || 操作符 | NULL处理不同: MySQL忽略NULL,Pg需用 || 或CONCAT_WS |
带分隔符拼接 | CONCAT_WS(separator, str1, str2) | CONCAT_WS(separator, str1, str2) | 语法相同 |
示例 | SELECT CONCAT('a', NULL, 'b'); → ab | SELECT 'a' || NULL || 'b'; → NULL | PostgreSQL需显式处理NULL |
4. 分列(Split)
功能描述 | MySQL | PostgreSQL | 关键区别 |
---|---|---|---|
按分隔符拆分 | SUBSTRING_INDEX(str, delim, count) | SPLIT_PART(str, delim, index) | 函数名不同,参数逻辑相似 |
拆分为多行 | 需结合JSON_TABLE (MySQL 8.0+) | UNNEST(STRING_TO_ARRAY(str, delim)) | PostgreSQL原生支持数组拆分 |
示例 | SELECT SUBSTRING_INDEX('a,b,c', ',', 2); → a,b | SELECT SPLIT_PART('a,b,c', ',', 2); → b | PostgreSQL索引从1开始 |
关键差异总结
-
正则表达式支持:
-
PostgreSQL的正则引擎更强大(如
\m
单词边界、\p{Unicode属性}
等)。 -
MySQL需使用
REGEXP_
前缀函数(如REGEXP_REPLACE
)。
-
-
NULL处理逻辑:
-
MySQL的
CONCAT()
自动忽略NULL,PostgreSQL的CONCAT()
遇NULL返回NULL,需用\|\|
或COALESCE
处理。
-
-
函数命名与语法:
-
分列操作:MySQL用
SUBSTRING_INDEX
,PostgreSQL用SPLIT_PART
。 -
正则抽取:PostgreSQL直接扩展
SUBSTRING
,MySQL需REGEXP_SUBSTR
。
-
-
数据类型扩展:
-
PostgreSQL原生支持数组类型(
STRING_TO_ARRAY
)和JSON拆分(json_array_elements
),MySQL需依赖JSON函数。
-
使用建议
-
简单操作:优先使用标准SQL函数(如
REPLACE
、SUBSTRING
)。 -
复杂正则:PostgreSQL更适合(如多模式匹配)。
-
分列需求:PostgreSQL的
SPLIT_PART
和数组操作更直观。 -
版本注意:MySQL 8.0+才支持完整正则函数(如
REGEXP_REPLACE
)。
所以在使用时需要根据不同的去调整sql代码(建议去相应的官网查询)
字段类型转换
这里补一个python中的常见函数类型转换
常用转换函数总结
目标类型 | 转换函数 | 示例 |
---|---|---|
int | int() | int("123") → 123 |
float | float() | float("3.14") → 3.14 |
str | str() | str(100) → "100" |
bool | bool() | bool(0) → False |
list | list() | list((1,2)) → [1,2] |
tuple | tuple() | tuple([1,2]) → (1,2) |
dict | dict() | dict([('a',1)]) → {'a':1} |
例题:
case where使用样例:
case where的不同顺序会有不同结果