不同数据库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常用操作的更多相关文章

  1. mysql常用操作语句

    mysql常用操作语句 1.mysql -u root -p   2.mysql -h localhost -u root -p database_name 2.列出数据库: 1.show datab ...

  2. MySQL常用操作总结

    MySQL常用操作 前提条件:已安装MySQL. 学习目标:用一条sql语句写出A和B的剩余数量 AA表 BB表 以上为一道面试题,接下来由这道面试题来回顾一些数据库的基本操作. 登录MySQL su ...

  3. PostgreSQL与MySQL常用命令比较[转]

    PostgreSQL与MySQL常用命令比较 原文链接: http://www.phpwell.com/?p=174 PostgreSQL MySQL 服务启动:1)#service postgres ...

  4. centos LAMP第四部分mysql操作 忘记root密码 skip-innodb 配置慢查询日志 mysql常用操作 mysql常用操作 mysql备份与恢复 第二十二节课

    centos  LAMP第四部分mysql操作  忘记root密码  skip-innodb 配置慢查询日志 mysql常用操作  mysql常用操作 mysql备份与恢复   第二十二节课 mysq ...

  5. Windows平台下MySQL常用操作与命令

    Windows平台下MySQL常用操作与命令 Windows平台下MySQL常用操作与命令,学习mysql的朋友可以参考下. 1.导出整个数据库 mysqldump -u 用户名 -p --defau ...

  6. MySQL常用操作2

    MySQL常用操作2 判断函数 IF(expr, value1, value2)  --  如果表达式expr为true,则返回value1,否则返回value2 IFNULL(value1, val ...

  7. Linux 笔记 - 第十五章 MySQL 常用操作和 phpMyAdmin

    博客地址:http://www.moonxy.com 一.前言 前面几章介绍了 MySQL 的安装和简单的配置,只会这些还不够,作为 Linux 系统管理员,我们还需要掌握一些基本的操作,以满足日常管 ...

  8. 学会使用简单的 MySQL 常用操作

    一.MySQL 数据库的基本安装 # yum 安装 mysql 版本:5.1.73 [root@mysql ~]# yum install -y mysql-server mysql # 启动 MyS ...

  9. MYSQL常用操作函数的封装

    1.mysql常用函数封装文件:mysql.func.php <?php /** * 连接MYSQL函数 * @param string $host * @param string $usern ...

  10. 第二篇 Mysql常用操作记录(转载)

    我们在创建网站的时候,一般需要用到数据库.考虑到安全性,建议使用非root用户.常用命令如下: 1.新建用户 //登录MYSQL@>mysql -u root -p@>密码//创建用户my ...

随机推荐

  1. weixueyuan-Nginx微服务11

    https://www.weixueyuan.net/nginx/microservices/ 微服务是什么 计算机自诞生以来,极大地影响了人类的生产和社会活动,软件生产以一种生产活动的方式进入了人们 ...

  2. nginx配置参数优化

    ginx作为高性能web服务器,即使不特意调整配置参数也可以处理大量的并发请求.以下的配置参数是借鉴网上的一些调优参数,仅作为参考,不见得适于你的线上业务. worker进程 worker_proce ...

  3. Dummynet简单部署

    本文分享自天翼云开发者社区<Dummynet简单部署>,作者:凸凹 部署流程 ^准备内核版本 ^参看系统内核版本 uname -r 我们需要将ipfw编译成内核模块,请确保ipfw用到的内 ...

  4. Project Euler 728 题解

    Problem 728 Circle of Coins 得到 Wallbreaker5th 的指导. \(F\) 就是求这些环上区间(记为 \(A\))的异或线性基大小.令 \(A'_i\gets A ...

  5. Java轻量级代码工程

    一.背景简介 最近2年,很多公司接项目开始不挑剔了,只要核算下来有收益不会亏,就会库库的做各种没头没脑的项目,都是抱着多撑一天是一天的躺平心态. 如果项目和业务稳定,自然也有动力卷架构卷设计. 然而2 ...

  6. 在windows主机本地快速部署使用deepseek-r1大模型

    一台配备 Windows 操作系统.12GB 或以上显存的英伟达显卡.8GB 或以上内存,并能连接互联网的电脑可以继续阅读以下内容. 简介 Ollama(用于下载和启动大模型) Ollama 专注于本 ...

  7. 在 WPF 应用程序中缓存应用程序数据

    参考学习链接:https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/advanced/walkthrough-caching-applicatio ...

  8. 精选4款基于.NET开源、功能强大的通讯调试工具

    前言 今天大姚给大家分享4款基于.NET开源.功能强大的通讯调试工具,旨在帮助.NET开发者们更好的应对通讯调试方面的学习和工作,提升调试效率. LLCOM LLCOM是一个.NET开源的.功能强大的 ...

  9. C语言中函数有多个返回值的实现

    在C中,正常情况下,我们只能从函数中返回一个值.但在有些情况下,我们需要从函数中返回多个值,此时使用数组或指针能够很好地完成这样的任务.这里是一个示例,这个程序使用一个整型数组作为参数,并将数组元素的 ...

  10. 盘点10个.NetCore实用的开源框架项目

    连续分享.Net开源项目快3个月了,今天我们一起梳理下10个,比较受到大家欢迎的.NetCore开源框架项目. 更多开源项目,可以查看我创建的,.Net开源项目榜单! 一个专注收集.Net开源项目的榜 ...