常见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的不同顺序会有不同结果
