最近在一个Python项目中做多个数据库之间(主要是MySQL、Oracle和Postgresql)的sql语句兼容,整理了一下它们之间的区别。
总结如下:
时间区别
| MySQL | PostgreSQL | Oracle | |
| 时间转字符串 | date_format(NOW(),’%Y-%m-%d’) | to_char(sysdate, ‘YYYY-MM-DD’) | 同postgresql |
| 字符串转时间 | str_to_date(str, '%Y-%m-%d') | to_date('dateString', '%Y-%m-%d') | 同postgresql |
单双引号
| MySQL | PostgreSQL | Oracle | |
| 单引号 | 表示值,用于字符串和日期 | 表示值,用于字符串 | 用于字符串或者转义 |
| 双引号 | 作用同单引号 | 用于标识表名或列名 | 用于字段名、schema、别名和关键字等。用双引号则严格区分大小写。 |
| 反引号 | 用于标识表名或列名 | 无 | 无 |
空值
mysql有null和'',而postgresql和Oracle则是null。
limit用法
mysql和postgresql有limit的用法,但Oracle无法直接使用,需要借助内置的rownum去计算行数
SELECT * FROM TABLE_NAME WHERE rownum<20 and rownum>=10;
模式
| MySQL | PostgreSQL | Oracle | |
| 模式(schema) | 缺省时为用户名(同数据库名) | 缺省时,模式为public | 由一个数据库用户拥有,并与用户名具有相同的名称。Oracle不能新建一个schema,只能通过创建一个用户来新建schema |