不同数据库Oracle、PostgreSQL、Vertical、Mysql常用操作
不同数据库Oracle、PostgreSQL、Vertical、Mysql常用操作
授权语句用于管理数据库用户的权限,常见的授权语句如下:
1、授权用户对表的SELECT权限
GRANT SELECT ON dbname.tbname TO username; 赋权限
grant select on test_db.students to new_user;
2、类型转换
cast(col AS INTEGER); 转整型
to_char(now()-interval '1 day','yyyymmdd'); 时间转字符串
NVL(to_char(to_char(col,'YYYYMMDDHH24MISS')))
3、PGV数据库:区分大小写,库表列名小写,常用类型有: bigint、numeric、date、timestamp、time
string_agg(column_name, separator) 将结果集某个字段的所有行连接成字符串
substr("原始字符","指定的字符",布尔值) 获取指定字符串之后或之前所有字符
SUBSTRING(string FROM start [FOR length]) 截取字符串中指定位置的字符
LEFT(string, length) 截取字符串左边指定数量的字符
RIGHT(string, length) 截取字符串右边指定数量的字符
CONCAT(string1, string2, ...) 将多个字符串进行连接
replace(uuid_generate_v4()::text,'-','') 获取uuid:sys_uuid、gen_random_uuid、uuid_generate_v5
cast('123' as bigint) '123'::numeric bigint '123'
row_number() over( [ partition by col1] order by col2[ desc ] )
select max(length(colname)) from tbname; 获取列最大长度
NVL(expr1,expr2); 如果expr1为空,则返回expr2;否则返回expr1(函数需要先创建)
COALESCE(expr1, expr2, ...); 逐个判断返回不为空的值,如果所有表达式均为空,则返回NULL
md5(str)
pgv3不能用NOT IN,用 LEFT JOIN或NOT EXISTS实现
SELECT ID FROM A WHERE NOT EXISTS IN(SELECT 1 FROM B WHERE A.ID=B.ID)
时间操作:
select now() ;当前时间 /* timestamp格式 'yyyyMMdd hh:mm:ss' */
select current_date ;当前时间 /* date格式 ‘yyyyMMdd' */
select now() - interval '1 week'; 近一周
select to_char(now()-interval '1 month','yyyymm'); 获取上月日期
select date_trunc('day',now()::TIMESTAMP) 获取当天时间
select date_trunc('month',now()::TIMESTAMP) 获取当月1号
select trunc(now(),'mm') 获取当月1号
select date_trunc('month',now()) + '1month -1day'; 当前日期的月末
select (date_trunc('month',now()) +'-1 day')::date ; 当前日期的上月末
select (date_trunc('month',now()) +'-1 month')::date ; 当前日期的上月1号
select add_months(trunc(now(),'mm'),-1) 当前日期的上月1号
select date_trunc('quarter', current_date) 获取当前季度开始日期
select date_trunc('quarter', current_date) + '3 month' - interval '1 day' 获取当前季度结束日期
select date_trunc('year',now())::date ; 当前日期的年初
select date_trunc('year',now()) + '1year - 1 day' ::date ; 当前日期的年末
select extract(month from now()+'-1 month'); 获取上个月月份数
select extract(month from date('202402'||'01')); 获取数字月份数
select extract(year from now()+'-1 month'); 获取上年年份数
select to_char(to_timestamp('2024-2-26', 'YYYY-MM-DD'),'YYYY-MM-DD'); 日期转字符串
select to_char(now(), 'YYYY-MM-DD HH24:MI:SS') 获取日期时间字符串
select to_date('2024-2-26', 'YYYY-MM-DD'); 字符串转日期
select date_part('month',now()) 获取月份数
EXCEPT对比两张表差异:数据出现第一个表,但不在第二个表。outer join 加主键对比两表数据
select * from pg_tables where TABLENAME='tbname'; 查询表归属
select * from information_schema_table_privileges where table_name='tbname'; 查询表权限
select 'grant select on schN.'||tablename||' to newUN;' from pg_tables
where schemaName='schN' and tableowner='oldUN'; #批量赋权
select pid, query from pg_stat_cluster_activity where query like '%tbname%' and nodename like '%cn%'; #查询死锁
select pid, query from pg_stat_cluster_activity where queryid='qid'; #查看并行执行
select pg_terminate_backend( '进程pid'); 杀掉进程pid
select pg_cancel_backend( '进程pid'); 杀掉进程pid
4、ORACLE数据库: 严格区分大小写 (19c表别名可以不加AS) ,拼接单引号''',''' 特殊类型有 CLOB
LISTAGG(XXX,',') WITHIN GROUP( ORDER BY XXX) over(partition by XXX) rank 行转列拼接字符串
SELECT SUBSTR(CAST(LISTAGG(COL,''',''') WITHIN GROUP(ORDER BY KW) AS VARCHAR2(1000)),1,1000) AS LTAG
RTRIM(xmlagg(xmlparse(content col || ','wellformed) order by col).getclobval(),',')
RTRIM(xmlagg(XMLELEMENT(E, col,',').EXTRACT('//text()') order by col).getclobval(),',')
SUBSTR(string,start, [length]); 截取字符串
months_between('2024-02-11',sysdate-1); 获取月份差
select trunc(start-end) from dual; 获取时间差天数 floor(sta-end); 获取日期差
add_months(trunc(sysdate,'mm'),-1) 获取上一个月份1号
add_months(sysdate,-1) 获取上个月日期
SELECT add_months(SYSDATE, 1) FROM dual; 一个月后的日期
SELECT add_months(TRUNC(SYSDATE, 'YYYY'), 12) - TRUNC(SYSDATE, 'YYYY') days FROM dual; 当年天数
-- 当前时间减去10分钟,同理换成year(年)、month(月)、day(日)、hour(时)、second(秒)
select sysdate,sysdate - interval '10' minute from dual; 获取十分钟前时间
select sysdate - interval '10' day as ten_days_ago,sysdate -10 from dual; 获取十天前时间
to_date('202402'||'01','yyyymmdd') 字符串转格式化日期
to_char(add_months(sysdate,-1),'mm') 获取上个月月份数
to_char(sysdate, 'YYYY') 获取本年年份数
cast(to_date('2024/2/26','yyyy-mm-dd,hh24:mi:ss') as timestamp) 字符串转时间戳
to_char(to_timestamp('2024-2-26','yyyy-mm-dd hh24:mi:ss') ,'YYYY-MM-DD HH24:MI:SS') 特殊格式:DD-MON-YY HH.MI.SS AM
NVL(expr1,expr2);如果expr1为空,则返回expr2;否则返回expr1
COALESCE(expr1, expr2, ...); 逐个判断返回不为空的值,如果所有表达式均为空,则返回NULL。
select ROW_NUMBER() OVER (PARTITION BY uuid ORDER BY dt DESC) AS rn FROM tbname where rn=1; 分组排序取第一个
select SYS_GUID() from dual; 获取数据库 uuid
DBMS_RANDOM.VALUE 获取随机数RANDOM()
MINUS对比两张表差异。也可以使用NOT IN子查询,NOT EXISTS子查询,LEFT JOIN和IS NULL 判断
select * from all_tables t where t.table_name like '%tbname%' and t.owner like '%user%'; 查表
select * from all_objects t where t.object_name like '%tbname%' and t.owner like '%user%';
select * from dba_segments t where t.segment_name like '%tbname%' and t.owner like '%user%';
select * from all_col_comments t where t.table_name like '%tbname%' and t.column_name like '%comn%';
SELECT Last_Day FROM(SELECT TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,-24)+LEVEL-1),'YYYY-MM-DD') AS Last_Day --获取最近两年每个月的最后一天日期
SELECT FROM DUAL CONNECT BY LEVEL<=ADD_MONTHS(SYSDATE,-0)-ADD_MONTHS(SYSDATE,-24)+1)aa GROUP BY Last_Day;
SELECT CASE WHEN REGEXP_LIKE(col,'^(-)*[[:digit:]]+(\.[[:digit:]]+)*$')
THEN '数字' ELSE '非数字' END AS rt FROM tbname; 查找数字
5、Vertical 数据库:严格区分大小写,常用函数与pg类似,部分函数与Oracle类似
row_number() over (partition by colkey order by col) as rnk 分组排序编号
rank() over (partition by colkey order by col) as rnk 分组排序续编号
GETDATE() NOW() 获取当前时间
MONTH(now())-1 获取上个月月份数
last_day(date('202402'||'01')) 当前日期的月末
substr(cast(listagg(col USING parameters max_length=3000,on_overflow='TRUNCATE') AS varchar),1,1199); 行转列拼接字符串,截取1199段
REPLACE(CAST(UUID_GENERATE() AS VARCHAR),'-','') 获取数据库uuid
SELECT MONTHS_BETWEEN('2023-03-01'::DATE,'2023-01-01'::DATE) AS MONTHS_DIFFERENCE; 获取月份差
DROP TABLE tbname CASCADE 删除有依赖对象的表
alter table schemaName.tbname alter column colname set DATA TYPE ${dataType}; 修改字段类型
alter table schemaName.tbname rename column colname to field2; 修改列名
alter table schemaName.tbname alter column colname drop not null; 删除字段不为空约束
select table_name,owner_name from tables where table_name='tbname'; 查看表所有者
6、MYSQL数据库:严格区分大小写
SELECT DATE_FORMAT(NOW(),'%Y-%M-%D %H:%I:%S'); 获取日期字符串
SELECT DATE_ADD(NOW(),INTERVAL 1 DAY); 加1天DAY/HOUR/WEEK/MONTH/QUARTER/YEAR
SELECT DATE_SUB(NOW(),INTERVAL 30 DAY);
以上是不同数据库常见的操作,包括授权语句、数据类型转换、时间操作、字符串操作、NULL值处理、窗口函数、数据库特定功能、表和权限管理以及对比表差异等,方便日常在不同数据库处理数据。
不同数据库Oracle、PostgreSQL、Vertical、Mysql常用操作的更多相关文章
- mysql常用操作语句
mysql常用操作语句 1.mysql -u root -p 2.mysql -h localhost -u root -p database_name 2.列出数据库: 1.show datab ...
- MySQL常用操作总结
MySQL常用操作 前提条件:已安装MySQL. 学习目标:用一条sql语句写出A和B的剩余数量 AA表 BB表 以上为一道面试题,接下来由这道面试题来回顾一些数据库的基本操作. 登录MySQL su ...
- PostgreSQL与MySQL常用命令比较[转]
PostgreSQL与MySQL常用命令比较 原文链接: http://www.phpwell.com/?p=174 PostgreSQL MySQL 服务启动:1)#service postgres ...
- centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课
centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课 mysq ...
- Windows平台下MySQL常用操作与命令
Windows平台下MySQL常用操作与命令 Windows平台下MySQL常用操作与命令,学习mysql的朋友可以参考下. 1.导出整个数据库 mysqldump -u 用户名 -p --defau ...
- MySQL常用操作2
MySQL常用操作2 判断函数 IF(expr, value1, value2) -- 如果表达式expr为true,则返回value1,否则返回value2 IFNULL(value1, val ...
- Linux 笔记 - 第十五章 MySQL 常用操作和 phpMyAdmin
博客地址:http://www.moonxy.com 一.前言 前面几章介绍了 MySQL 的安装和简单的配置,只会这些还不够,作为 Linux 系统管理员,我们还需要掌握一些基本的操作,以满足日常管 ...
- 学会使用简单的 MySQL 常用操作
一.MySQL 数据库的基本安装 # yum 安装 mysql 版本:5.1.73 [root@mysql ~]# yum install -y mysql-server mysql # 启动 MyS ...
- MYSQL常用操作函数的封装
1.mysql常用函数封装文件:mysql.func.php <?php /** * 连接MYSQL函数 * @param string $host * @param string $usern ...
- 第二篇 Mysql常用操作记录(转载)
我们在创建网站的时候,一般需要用到数据库.考虑到安全性,建议使用非root用户.常用命令如下: 1.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户my ...
随机推荐
- C# 开发工具Visual Studio 介绍
Visual Studio Community (社区版) 这个版本的 Visual Studio 是免费的,具备以前 Professional 版的功能.使用时间有许可限制.它对开源项目和培训.学术 ...
- not in 和 not exists 比较和用法
尽量不要使用not in(它会调用子查询),而尽量使用not exists(它会调用关联子查询).查询语句使用了not in,那么对内外表都进行全表扫描,没有用到索引:而not exists的子查询依 ...
- 对比使用DeepSeek与文新一言,了解DeepSeek的关键技术论文
DeepSeek是国内大模型技术的新秀,最近也在业界和媒体界火爆出圈,所以想学习一下其技术. 大模型时代,学习知识,当然首先想到利用大模型,由于在过去一年,对DeepSeek使用不多,所以想和文新一言 ...
- 解决使用yarn安装依赖出现“The engine "node" is incompatible with this module. Expected version "^14.18.0 || ^16.14.0 || >=18.0.0". Got "17.9.0"”的问题
1.问题描述 某天在使用yarn安装依赖的时候,突然出现如下错误导致安装依赖终止: The engine "node" is incompatible with this modu ...
- Mac安装Prometheus + Grafana
一.安装Prometheus 1.下载安装 brew install prometheus 2.安装路径 /opt/homebrew/Cellar/prometheus/3.1.0 3.修改配置文件 ...
- Flink同步mysql到iceberg
一.如何做一致性保障 1.全量数据分片读取,增量数据单并发读取,保证增量阶段不会乱序2.全量阶段写入失败会清空表后重新写入,避免重复数据.3.全量阶段多task并行读取,把每个task开始结束时间提交 ...
- 5.main.js配置
1.根目录新建api文件夹 api文件夹分mock(存放虚拟json)和urls(api请求链接) urls 中新建index.js来汇总按分类拆分的url请求文件 2.添加api配置 imp ...
- Flink基础Source配置
一.pom文件 https://www.cnblogs.com/robots2/p/16048648.html 二.代码demo FlinkBaseSource.java package net.xd ...
- [BZOJ4605] 崂山白花蛇草水 题解
突然想买一瓶,然后喝上几口.(不要命的想法) 动态全局 \(k\) 大想到权值线段树上二分. 由于要存储二维的点,所以得用到我们神通广大的 \(KDT\) 了. 那么想到权值线段树套 \(KDT\) ...
- 升级 element-ui 2.15.7 后遇到 el-date-picker 警告问题
近期把 element-ui 升级到了官网最新的 2.15.7 版本,无意间发现控制台出现了 Prop being mutated: "placement" 警告,完整警告: