数据库 Tips
数据库 Tips
时间和日期互转
数据库 | 当前时间 | 字符串转时间 | 时间转字符串 | 格式 | dual 表 |
---|---|---|---|---|---|
MySQL | NOW() |
STR_TO_DATE |
DATE_FORMAT |
%Y-%m-%d %H:%i:%s |
可选 |
Oracle | SYSTIMESTAMP 、SYSDATE |
TO_TIMESTAMP 、TO_DATE |
TO_CHAR |
YYYY-MM-DD HH24:MI:SS |
必须用 |
PostgreSQL | CURRENT_DATE 、CURRENT_TIME 、CURRENT_TIMESTAMP |
TO_DATE 、TO_TIMESTAMP |
TO_CHAR |
YYYY-MM-DD HH24:MI:SS |
不能用 |
数据库迁移
迁移到 PostgreSQL
可以使用 pgloader,有 Docker 镜像:dimitri/pgloader
图形化工具
- a5m2:全称「A5:SQL MK-2」,一个日本人开发的图形化工具,直接在数据库上右键,然后选择
Data Transfer...
就可以了,可以选择不同的数据库类型。 - navicat:只能迁移相同类型的数据库,比如 mysql -> mysql,或者 pgsql -> pgsql。
MySQL
创建数据库并指定字符集
并不难,只不过用的比较多,记下来
CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `test` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
时间和字符串互转
STR_TO_DATE
和DATE_FORMAT
,转换格式:%Y-%m-%d %H:%i:%s
Oracle
(+) 符号
这种是旧写法,oracle 已经不再推荐
详情可见https://stackoverflow.com/a/47008794/17746262
在 Oracle 中,(+)
表示 JOIN 中的“可选”表。
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id=b.id(+)
现代写法就是:
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a
LEFT JOIN b ON a.id=b.id
创建序列
-- 创建序列
create sequence seq_newsId
-- 删除序列
DROP SEQUENCE seq_newsId
PostgreSQL
判断时间重合
使用tsrange
函数:
select * from example
where tsrange(start_time, end_time, '()') && tsrange(start_time2, end_time2, '()')
解释:tsrange 可以把时间转换成时间段然后使用&&
判断是否重合,第三个参数代表边界范围,即开区间还是闭区间,可选(
和[
,
前者代表开区间,即不包含边界,后者代表闭区间,包含边界,第一个括号代表开始时间,第二个括号代表结束时间。
持续更新中……