前言
今天是元宵节,首先祝大伙元宵快乐!上一篇文章,给大家讲解了一下MySQL和PostgreSQL性能上的差别。这篇文章主要是记录一下日常应用中,两者常见的一些语法以及一些区别。
PostgreSQL的数据类型
数值类型
字符串类型
日期|时间类型
布尔类型
货币类型
几何类型
常见的区别
建表语句
这里主要是为了说明两者建表时候,自增逐渐的区别,MySQL的自增一般用auto_increment, PgSql直接用bigserial即可,如果是普通的整型的话,用serial就行,有的文章讲解了很多什么设置起始值,如果默认从1开始的话,按照我这里的就满足需求了,简单的东西简单处理就好,不用过分复杂化,因为效果是一样的。
- MySQL
CREATE TABLE test_create_TABLE (id INT UNSIGNED NOT NULL AUTO_ INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT
);
- PgSQL
CREATE table test_create_table
( "id" bigserial NOT NULL PRIMARY KEY,"name" VARCHAR NOT NULL,"age" int4
);备注:非long型的可以用serial;插入两条数据看一下结果
insert into test_create_table(name,age) values ('张三',20);
insert into test_create_table(name,age) values ('李四',30);SELECT * from test_create_table;
分页处理
- PostgreSQL两种分页方法查询
数据量较大的时候采用第一种方式
--第一种
SELECT * FROM test_create_table WHERE i_id>0 limit 100;--第二种 offset从0开始,offset 0表示从第一行开始获取。
SELECT * FROM test_create_table limit 100 OFFSET 0;
- MySQL的分页
SELECT * FROM test_table limit 100, 10;
函数区别
- 时间转字符串
--MySQL:
date_format(a.day_time,'%Y-%m-%d %H:%i:%s')--PostgreSQL:
to_char(a.day_time,'yyyy-mm-dd HH:MM:SS')
- 字符串转时间
--MySQL:
date_format(a.day_time,'%Y-%m-%d %H:%i:%s')--PostgreSQL:
to_date(a.day_time,'yyyy-mm-dd HH:MM:SS')
- IFNULL()函数
--MySQL:
IFNULL(a.id,'')--PostgreSQL:
COALESCE(a.id,'')
- sysdate()函数
MySQL: SELECT sysdate()PostgreSQL: SELECT now()
- find_in_set()函数
-- find_in_set()函数说明(允许在逗号分隔的字符串列表中查找指定字符串的位置)MySQL: SELECT t.dept_id FROM sys_dept t WHERE find_in_set(‘100’, ancestors)PostgreSQL: SELECT t.dept_id FROM sys_dept t WHERE ‘100’ = ANY (string_to_array(ancestors, ‘,’))
- group_concat()函数
-- group_concat()函数MySQL: select a.name,group_concat(distinct city)from user_city a group by a.name;PostgreSQL: select a.name,array_to_string(array_agg(distinct a.city),‘,’)from user_city a group by a.name;
- MyBatis-Plus整合MySQL、PostgreSQL,like使用
-- LIKE是一般用法,ILIKE匹配时则不区分字符串的大小写-- MySQL:<select id="queryDetail" resultMap="reportResultMap">SELECT*FROMfinancial_reportWHERE is_deleted=0 AND status = 1 AND name LIKE concat('%',#{handleTask.name},'%')</select>-- PostgreSQL:<select id="queryDetail" resultMap="reportResultMap">SELECT*FROMfinancial_reportWHERE is_deleted=0 AND status = 1 AND name like concat('%',#{handleTask.name}::varchar,'%')</select>温馨提醒:注意pgsql后面的处理,::varchar
- 数据类型转化(针对于PgSQL)
-- 强转(在查询字段上指定数据类型)a.a1 = b.b1::int8
-- 或者
a.a1::varchar = b.b1
-- 或者
CAST(a.a1 AS varchar)MySQL:CAST(a.a1 AS varchar)
- 字段拼接
SELECT string_agg(address,',') FROM address GROUP BY grade;
--未去重的情况下:
string_agg|
----------|
黄河路,黄河路 |
黄河路,黄河路 |
SELECT string_agg(distinct address,',') FROM address GROUP BY grade;
string_agg|
----------|
黄河路 |
黄河路 |
如果想对拼接的值做排序,可以在拼接符号后面加order by
SELECT string_agg(name,',' order by name desc) FROM address GROUP BY grade;
--结果:
string_agg|
----------|
小B,小A |
小D,小C |
- 获取当前时间
1、MySQL
CURDATE(), CURTIME(), NOW():可以获取客户端所在时区的当前时间;
UTC_DATE(), UTC_TIME(), UTC_TIMESTAMP():可以获得当前的UTC时间;
CURRENT_DATE(), CURRENT_TIME(), CURRENT_TIMESTAMP():就是CURDATE(), CURTIME(), NOW()的别名
mysql> SELECT CURDATE(), CURTIME(), NOW();
+------------+-----------+---------------------+
| CURDATE() | CURTIME() | NOW() |
+------------+-----------+---------------------+
| 2024-02-24 | 11:45:47 | 2024-02-24 11:45:47 |
+------------+-----------+---------------------+mysql> SELECT UTC_DATE(), UTC_TIME(), UTC_TIMESTAMP();
+------------+------------+---------------------+
| UTC_DATE() | UTC_TIME() | UTC_TIMESTAMP() |
+------------+------------+---------------------+
| 2024-02-24 | 07:46:10 | 2024-02-24 07:46:10 |
+------------+------------+---------------------+mysql> SELECT CURRENT_DATE(), CURRENT_TIME(), CURRENT_TIMESTAMP();
+----------------+----------------+---------------------+
| CURRENT_DATE() | CURRENT_TIME() | CURRENT_TIMESTAMP() |
+----------------+----------------+---------------------+
| 2024-02-24 | 11:46:31 | 2024-02-24 11:46:31 |
+----------------+----------------+---------------------+
2、PgSql
说明:precision表示秒的精度,比如想精确到3位,直接把precision填充成3就可以
select now();
select CURRENT_DATE;
select CURRENT_TIME;
select CURRENT_TIMESTAMP;
select CURRENT_TIME(precision);
select CURRENT_TIMESTAMP(precision);
select LOCALTIME;
select LOCALTIMESTAMP;
select LOCALTIME(precision);
select LOCALTIMESTAMP(precision);--示例
SELECT CURRENT_TIME;
结果:14:39:53.662522-05SELECT CURRENT_DATE;
结果:2001-12-23SELECT CURRENT_TIMESTAMP;
结果:2001-12-23 14:39:53.662522-05SELECT CURRENT_TIMESTAMP(2);
结果:2001-12-23 14:39:53.66-05SELECT LOCALTIMESTAMP;
结果:2001-12-23 14:39:53.662522
写在最后
以上就是今天的干货分享,内容其实不难,一般遇到的时候查阅一下都有,这里就是记录一下,嗑瓜子的时候看到,刚好就有个概念。觉得有点收获的话,帮忙点赞 + 在看,分享不易,你的点赞是我坚持输出的动力,感激涕零,下期再见。