Oracle与MySQL数据库语法差异对比
"这篇总结主要探讨了Oracle和MySQL两种数据库在SQL语法上的差异,包括日期格式转换、行限制、子查询别名、计数查询、行号处理、当前时间获取以及CASE语句的使用方式。" 1. 日期格式转换: - MySQL中,将日期格式化为'yyyy-MM-dd',可以使用`DATE_FORMAT(date, '%Y-%m-%d')`,而在Oracle中,相应的函数是`TO_CHAR(date, 'yyyy-MM-dd')`。 - 将字符串转换为日期,MySQL使用`STR_TO_DATE(date, '%Y-%m-%d')`,Oracle则使用`TO_DATE(date, 'yyyy-MM-dd')`。 2. 行限制(分页查询): - Oracle中,使用`ROWNUM`配合`WHERE`子句来限制返回的行数,例如:`SELECT month_id FROM dmd_month WHERE ROWNUM = 1 ORDER BY month_id DESC`。 - MySQL采用`LIMIT`关键字,如:`SELECT month_id FROM dmd_month ORDER BY month_id DESC LIMIT 1`。注意,Oracle没有直接对应的`LIMIT`功能,通常需要结合子查询或`ROWNUM`来实现类似效果。 3. 子查询别名: - MySQL要求每个派生表(子查询)都有自己的别名,例如:`SELECT COUNT(*) FROM (SELECT * FROM opm_sys_user_info) AS total`。 - Oracle同样需要子查询有别名,但语法规则略有不同:`SELECT COUNT(*) total FROM (SELECT a.* FROM opm_sys_user_info a WHERE 1=1 AND a.user_id LIKE '%00000%')`. 4. 计数查询: - MySQL的计数查询可能会导致多行结果,可以使用子查询解决:`SELECT COUNT(*) total FROM (SELECT a.* FROM opm_sys_user_info a WHERE 1=1 AND a.user_id LIKE '%00000%') AS total`。 - Oracle的计数查询通常不会出现此问题,可以直接计数:`SELECT COUNT(*) total FROM (SELECT a.* FROM opm_sys_user_info a WHERE 1=1 AND a.user_id LIKE '%00000%')`. 5. 行号处理: - Oracle中,若要获取特定范围的行,需要结合`ROWNUM`和子查询:`SELECT * FROM (SELECT rownum AS frameworkRownum, t1.* FROM (SELECT a.* FROM opm_sys_user_info a WHERE 1=1 AND a.user_id LIKE '%00000%' ORDER BY a.user_id) t1) WHERE frameworkRownum BETWEEN 0 AND 30`。 - MySQL没有内置的行号功能,但可以通过自定义变量或结合`LIMIT`实现类似效果。 6. 获取当前时间: - MySQL获取当前时间使用`NOW()`函数。 - Oracle获取当前系统时间使用`SYSDATE`。 7. 查看表信息: - Oracle中,查看用户下的所有表使用`SELECT * FROM USER_TABLES`。 - MySQL则通过`INFORMATION_SCHEMA.TABLES`来获取表信息。 8. CASE语句: - Oracle和MySQL都支持CASE语句,但Oracle中的CASE语句可以不指定END,而MySQL的CASE语句必须以END结束。 这些是Oracle和MySQL在SQL语法上的一些关键区别,对于进行数据库迁移或跨数据库操作的开发者来说,了解这些差异至关重要。在实际工作中,需要根据具体需求和环境选择合适的语法来编写SQL语句。
date_format(date,'%Y-%m-%d') -------------->oracle中的to_char(date,'yyyy-MM-dd');
str_to_date(date,'%Y-%m-%d') -------------->oracle中的to_date(date,'yyyy-MM-dd');
2 rownum &&limit
ORACLE语法
select month_id from dmd_month where rownum =1 order by month_id desc
MYSQL语法
select month_id from dmd_month order by month_id desc limit 1
3 Every derived table must have its own alias
这句话的意思是说每个派生出来的表都必须有一个自己的别名, 一般在多表查询时,会出现此错误。
因为,进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名
把MySQL语句改成:select count(*) from (select * from ……) as total;
问题就解决了,虽然只加了一个没有任何作用的别名total,但这个别名是必须的。
ORACLE语法
select count(*) total from ( select a.* from opm_sys_user_info a where 1=1 and a.user_id like '%00000%' )
MYSQL语法
select count(*) total from ( select a.* from opm_sys_user_info a where 1=1 and a.user_id like '%00000%' ) as c
4 select * from (select rownum as frameworkRownum, t1.* from
( select a.* from opm_sys_user_info a where 1=1 and a.user_id like '%00000%' order by a.user_id as a ) t1) where frameworkRownum between 0 and 30
5 获取当前时间
mysql中now()函数的使用,oracle的sysdate
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 2
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全