不同数据库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 ...
随机推荐
- linux内核 list_for_each_entry
1. linux内核中的list用法 在linus内核中,list一般这样使用: struct list_head { struct list_head *priv; struct list_head ...
- 多方安全计算(6):MPC中场梳理
学习&转载文章:多方安全计算(6):MPC中场梳理 前言 诚为读者所知,数据出域的限制约束与数据流通的普遍需求共同催生了数据安全计算的需求,近一两年业界又统将能够做到多方数据可用不可见的技术归 ...
- unicode编码 asis_2019_unicorn_shop
这题就是让我们购买第四个商品 当我们输入price为1337.0的时候他会报错,显示要我们只输入一个字符 那么我们就要想怎样用一个字符来表示一个比1337还要大的数字 答案是unicode 编码 (题 ...
- 认识soui4js(第5篇):使用扩展控件
无论内置控件多么丰富,也不可能满足用户所有需求.总有时候用户需要自己扩展控件. soui4js推荐使用C++来扩展控件,然后通过实现一个js模块来提供js使用. 扩展控件通常涉及到图形上下文的频繁交互 ...
- RAW镜像格式介绍
本文分享自天翼云开发者社区<RAW镜像格式介绍>,作者:z****n RAW(Raw Disk Image)是一种简单而基本的虚拟化镜像格式,用于存储虚拟机的磁盘内容.它是一种原始的二进制 ...
- Core WebAPI配置Swagger
1.配置Swagger: Swagger是一套接口文档的规范,通过这套规范,你只需要按照它的规范去定义接口以及接口相关的信息.再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接 ...
- P3092 [USACO13NOV] No Change G 题解
传送门 题解 思路 看到 \(1\le k\le16\),我们想到状压DP. 以每枚硬币是否被使用为状态,对其进行枚举. 令 \(dp_i\) 表示状态 \(i\) 下最多能支付到第 \(dp_i\) ...
- flutter-TextField文本输入框 限制 数字键盘、输入小数点后两位
关键代码 keyboardType: TextInputType.number, inputFormatters: [ FilteringTextInputFormatter(RegExp(" ...
- DXF文件导入PADS板框问题
在使用PADS时,经常会从CAD文件中导出板框形状到PADS中. 也经常碰到一个问题:就是单位不匹配,CAD中明明设置成毫米了,可导入到PADS时却是mil. 发现单位不匹配的情况跟AUTOCAD里面 ...
- Spark 保存本地josn格式文件运行报错 IDEA运行异常java.lang.NoClassDefFoundError: org/apache/spark/api/java/function/Function
报错信息: java.lang.NoClassDefFoundError: org/apache/spark/api/java/function/Function at java.lang.Class ...