Oracle | Mysql | |
---|---|---|
字符串–>日期 | to_date() | str_to_date() |
日期–>字符串 | to_char() | date_format() |
格式 | yyyy-mm-dd hh:mi:ss | %Y-%m-%d %h:%i:%s |
Mysql中 H大写是指:24小时制;h小写是指的是12小时制
Oracle中 HH24是指:24小时制
Oracel | Mysql | |
---|---|---|
函数 | Rownum/rownum=1 | Limit/limit 1 |
//oracle中是采用rownum分页,A代表首行(从1开始),B代表结束行
oracle>select * from dual where rownum between A and B
//mysql中采用limit分页,A代表首行(从0开始),B代表偏移量(行数)
mysql>select * form dual where limit A,B
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
//如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行
//换句话说,LIMIT n 等价于 LIMIT 0,n。
Oracle | Mysql |
---|---|
NVL()/NVL2() | IfNull() |
Decode()/case…when… | if()/case…when… |
备注:
格式:IF(Condition,A,B)
意义:当Condition为TRUE时,返回A;当Condition为FALSE时,返回B。
作用:作为条件语句使用。
在mysql中,大于0或不为空的都可以表示为true;
小于等于0或为空或为null则表示false;
空字符串也是false;
case…when…代替decode
Oracle | Mysql | SqlServer | |
---|---|---|---|
with…as…函数 | Y | N | Y |
Rownum字段 | Y | N | N |
|| | Y | N(concat代替) | N |
时间 | SYSDATE | NOW() | |
序列 | sequence.nextVal() | 自定义函数 |
Oracle | Mysql |
---|---|
to_char() | CAST(123 AS CHAR)/CONCAT(123,’’) |
Oracle | Mysql |
---|---|
oracle左连接,右连接可以使用(+)来实现 | Mysql只能使用left join ,right join等关键字. |
""作为参数传入后,在oracle中将识别为null | ““作为参数据传mysql还是”” |
Oracle | Mysql |
---|---|
select * from dual start with … connect by … | select * from dual where orgNo like ‘**%’ |
备注: MySql中没有 start with … connect by …
别名 | Oracle | Mysql |
---|---|---|
delete语句 | Y | N |
update语句 | Y | N |
interval改词是Mysql中关键字
limit和order by 一样是最后使用,不能跟在and后面
1)多left join
表a 、表b、表c
a left join b on 条件1 以a为主表
a left join b on 条件1 left join c on 条件2
执行顺序是:
先a和b进行连接,生成一张中间表d,然后再和c进行条件连接生成最后的表的数据
2)多条件 on...and...where
on后面的条件是对前面的连接进行过滤的,不符合条件的部分显示为null
where是对整个查询结果进行过滤的,直接不显示结果,而不是显示为null
SELECT @rownum:=@rownum+1 FROM (SELECT @rownum:=0) r,orderitems;
对于这段sql的理解:
数据表的连接有:
1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现
2、外连接: 包括
(1)左外连接(左边的表不加限制)
(2)右外连接(右边的表不加限制)
(3)全外连接(左右两表都不加限制)
3、自连接(连接发生在一张基表内)
oracle中有 (+) 的一方代表有可以为空,即副表
from—where—group by—having—select—order by
1,from和where从右向左
2.group by和order by从左往右
**行转列:**把表中特定列的数据去重后做为列名;
**列转行:**可以说是行转列的反转,把表中特定列做为每一行数据对应列值;
第三种方法:借助辅助表,用case when then else end 转换
1.mybatis中临时表操作
<update id="createTempTable">
CREATE TEMPORARY TABLE IF NOT EXISTS temp
SELECT * FROM settlement_temp
WHERE settle_date=#{settleDate} AND LENGTH(operator) IN(16,32) AND pay_status IN ('01','06')
ORDER BY settle_date,merchant_no
update>
<update id="dropTempTable">
DROP TEMPORARY TABLE IF EXISTS settlement_temp;
update>
CREATE TABLE groups(
gid INT PRIMARY KEY AUTO_INCREMENT COMMENT '设置主键自增',
gname VARCHAR(200) COMMENT '列注释',
) COMMENT='表注释'
ALTER TABLE groups COMMENT '修改表注释'
ALTER TABLE groups MODIFY COLUMN gname VARCHAR(100) COMMENT '修改列注释'