Mysql、Oracle、SqlServer不同数据库一些SQL语句的区别

1.取数据的前几条数据或中间几行数据

MySQL:使用  limit

用法:【select * from tableName limit i,n 】

参数:

  • tableName : 为数据表;

  • i : 为查询结果的索引值(默认从0开始);

  • n : 为查询结果返回的数量

例句:SELECT * from role_user limit 0,5  等价于  SELECT * from role_user limit 5  取数据的前5条, 也就是从第一条开始,往后面取5条

SELECT * from role_user limit 5,10  取数据的 6-15行  从第6条开始,往后面取10条数据 

SQL server:使用 top 

SELECT TOP 2 * FROM Person   取"Person" 表中选取前两条记录

SELECT TOP 50 PERCENT * FROM Person   从"Person" 表中选取 50% 的记录

Oracle :使用 rownum

一般情况: select * from test where rownum<=10  会取出数据的前十条数据  ,但使用order by 查询出来的就不是你想要的前十条

应该 select * from (select * from test order by statedate desc ) where rownum<=10   把排序后的结果作为数据,再取前十条

例: SELECT *  FROM (SELECT a.*, ROWNUM rn  FROM torderdetail a)  WHERE rn >= 10 AND rn <= 20   取数据的第10条到20条

 

2. 字符串的拼接

MySQL: 使用 CONCAT()函数用于将多个字符串连接成一个字符串  注:支持多个参数拼接

SqlServer: 1. 用 + 号实现字符串拼接   2.用concat()内置函数实现字符串拼接 注:SQLServer 2012及更高版本才支持conconcat()函数。

Oracle: 1. 使用 " || " 符号进行   2.用concat()内置函数实现字符串拼接   注:Oracle的CONCAT()函数只支持两个参数,不支持两个以上字符串的拼接

 

3. 获取当前系统时间

MySQL: 使用 now() 、 sysdate()  都是获取当前日期+时间,不同之处在于:now()在执行开始时值就得到了,sysdate()在函数执行时动态得到值

SqlServer:  使用 GETDATE()  获取当前日期+时间

Oracle:  使用 sysdate 获取当前日期+时间   例:SQL:select sysdate from dual   结果:2021-03-03 13:30:25

 

4.判断参数是否为NULL,并返回一个默认值

MySQL: IFNULL(参数1,参数2)   判断参数1是否为NULL,如果是,返回参数2,否则返回参数1。

SqlServer: ISNULL(参数1,参数2),判断参数1是否为NULL,如果是,返回参数2,否则返回参数1。

Oracle: NVL(参数1,参数2),判断参数1是否为NULL,如果是,返回参数2,否则返回参数1。

 

其他: 对系统时间的运算区别、 字符串转整型 、字符串转日期 、补零函数 (如果有需要,可自行百度细节)

此文章记录的是本人修改项目在不同数据库下运行遇到的兼容问题,希望对大家有所帮助,也方便自己以后做同样任务的参考。

 

 

你可能感兴趣的:(JAVA,数据库,SQL,java,mysql,sqlserver,oracle,数据库)