Oracle与SQL Server的语法区别——Oracle数据库学习

Oracle与SQL Server的语法区别——Oracle数据库学习

因为长期使用SQL Server和MySQL数据库,现在因为工作原因使用Oracle数据库时难免会有些不同,特此记录,持续更新。

1. 调用函数不能够直接SELECT

不能够像MS或SS那样直接SELECT 1+1或者SELECT CONCAT('','')
正确做法是:

SELECT 1+1,CONCAT('A','B') FROM dual;

2. CONCAT函数只能有两个参数

Oracle中CONCAT函数只能有两个参数,如果需要连接多个字符串,需要嵌套,如下:

SELECT CONCAT(CONCAT('A', 'B'),'C') FROM dual;
  
SELECT CONCAT(CONCAT(CONCAT('A', 'B'),'C'),'D') FROM dual;

3. CONCAT连接单引号

由于CONCAT函数中的参数由单引号分隔,因此如何在CONCAT函数的结果中添加单引号字符并不简单。

SELECT CONCAT('Let''s', ' Go') FROM dual;
-- 输出为: Let's Go

4. 连接多个字符串

在 Oracle中,||运算符可以将两个或两个以上的字符串连接在一起。

SELECT 'This ' || 'is ' || 'test ' FROM dual;
-- 输出为: This is test

5. Initcap函数

在Oracle中,Initcap()函数可以将每个单词中的第一个字符设置为大写,其余的设置为小写。

SELECT INITCAP('VERSION HUANG in hangzhou') FROM dual;
-- 输出为: Version Huang In Hangzhou

6. 空值处理函数

在SQLServer中,对空值的处理可以使用ISNULL()函数来处理,在Oracle中也有相同的方法,不过函数名为NVL(),具体操作如下:

SELECT NVL(NULL, 5) FROM dual;
-- 输出为:5

7. 获取当前时间

在开发中经常会获取当前系统时间,在SQLServer中,通常使用GETDATE()方法,而在Oracle中,则使用SYSDATE关键字。

SELECT SYSDATE FROM dual;
-- 输出为:2021/5/18 15:02:12

而对时间进行格式化的方法,则使用TO_CHAR()函数:

SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd=>hh:mm:ss') FROM dual;
-- 输出为:2021-05-18=>03:05:58

8. 判断表是否存在

在SQLServer中,判断一个表是否存在时,会使用IF OBJECT_ID('xxx') IS NOT NULL方法来查询,在Oracle中也有相同的方法,不过写法具体操作如下:

SELECT COUNT(1) FROM user_tables WHERE table_name = 'MF_FACTORY_BASE';
-- 当表存在时输出为1;其中COUNT(1)可根据需要替换

9. 部分查询

在SQLServer中,查询表的前几行数据时,会使用TOP关键字来查询,在Oracle没有类似关键字,但可以通过ROWNUM关键字来筛选:

SELECT *
 FROM (SELECT * FROM MF_FACTORY_BASE ORDER BY ID)
WHERE ROWNUM <= 10;

你可能感兴趣的:(学习随记,数据库,sql,oracle)