目錄
db2與oracle的sql語句有什麼不同
1.建立類似表格語法
2.快速清除大表語法
3.取前N條資料語法
4.取得系統時間語法
#5.空值轉換方式不同
Coalesce()函數" >Coalesce()函數
首頁 資料庫 Oracle db2與oracle的sql語句有什麼差別

db2與oracle的sql語句有什麼差別

May 30, 2022 pm 05:23 PM
oracle

區別:1、db2用「create table a like b」建立類似表,oracle用「create table a as select * from b」;2、db2用varchar型別轉換,oracle用「to_char」函數轉換。

db2與oracle的sql語句有什麼差別

本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

db2與oracle的sql語句有什麼不同

1.建立類似表格語法

Oracle : 
	create table a as select * from b;
DB2    : 
	create table a like b;
		 
	(8版本有效,9版本无效)
	create table new_a as select col1,col2... from a definition only
登入後複製

2.快速清除大表語法

Oracle : 
	truncate table a;
DB2    :
	alter table a active not logged initially with empty table;
登入後複製

3.取前N條資料語法

Oracle : 
	select * from a where rownum <h4 id="strong-取得系統時間語法-strong"><strong>4.取得系統時間語法</strong></h4><pre class="brush:php;toolbar:false">Oracle :
	select sysdate from dual;
DB2    :
	select current timestamp from sysibm.sysdummy1;
登入後複製

#5.空值轉換方式不同

Oracle :
	select col1,col2,nvl(col3,'0') from tablename; (判断col3字段是否为空,不为空就输出原来的数值,为空就输出0)
DB2   :
	select col1,col2,value(col3,'0') from tablename;
	
	(mysql和Db2可以使用Coalesce(col3,'0')函数来实现上述功能)
登入後複製
Coalesce()函數
这个函数主要用来进行空值处理,其参数格式如下: COALESCE ( expression,value1,value2……,valuen) 
COALESCE()函数的第一个参数expression为待检测的表达式,而其后的参数个数不定。
COALESCE()函数将会返回包括expression在内的所有参数中的第一个非空表达式。
	如果expression不为空值则返回expression;
	否则判断value1是否是空值,如果value1不为空值则返回value1;
	否则判断value2是否是空值,如果value2不为空值则返回value2;
	……以此类推,
	如果所有的表达式都为空值,则返回NULL。
登入後複製

##6.型別轉換方式不同
oracle :
	select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;
DB2    :
	select varchar(current timestamp) from sysibm.sysdummy1;
登入後複製

解析:

Oracle数据类型改变函数:to_char()、to_date()、to_number()等;
	如果仅仅取年,月,日等,可以用
		to_char(sysdate, 'YYYY'),
		to_char('MM') ,
		to_char('DD')取得。
	只取年月日TRUNC(SYSDATE)。
	取时分秒TO_CHAR(SYSDATE,'HH24:MI:SS')。

DB2数据类型改变函数:char()、varchar()、int()、date()、time()等;
	取得年,月,日等的写法:
		YEAR(current timestamp),
		MONTH(current timestamp),
		DAY(current timestamp),
		HOUR(current timestamp),
		MINUTE(current timestamp),
		SECOND(current timestamp),
		MICROSECOND(current timestamp),
	只取年月日可以用
		DATE(current timestamp),
	取时分秒
		TIME(current timestamp)。
	Char()是定长字符串(1-255),varchar()为非定长字符串(1-32672)日期,
	时间形态变为字符形态: 
		char(current date),
		char(current time)
	将字符串转换成日期或时间形态:
		TIMESTAMP('2002-10-2012:00:00'),
		DATE('2002-10-20'),
		DATE('10/20/2002'),
		TIME('12:00:00')
登入後複製
目前DB2 V8也支援to_char和to_date,V9版新增了to_number

#7.字串轉換為日期方式不同(To_Number/cast)
Oracle:
	select to_number('123') from dual;
	select cast('123' as integer) from dual;
DB2   :
	select cast('123' as integer) from sysibm.sysdummy1;
	select cast(current time as char(8)) from sysibm.sysdummy1;
登入後複製

8.子查詢
Oracle:
	直接用子查询

Db2:WITH语句
	WITH  a1 AS(SELECT max(id) AS aa1 FROM test )SELECT id ,aa1 FROM test ,a1
登入後複製

9.遞迴查詢(分層查詢)
Oracle递归查询:CONNECT BY PRIOR ... START WITH ...
DB2   递归查询:DB2较难理解,要WITH一个虚拟表
登入後複製

Oracle:
//从child是son的数据向上查询出所有的长辈select distinct test_parent from (
       select t.test_parent from t_test t 
              connect by prior t.test_parent = t.test_child 
              start with t.test_child = 'son' )
登入後複製

db2與oracle的sql語句有什麼差別 了解更多:Oracle分層查詢(遞迴查詢):start with …connect by prior 以及level關鍵字

DB2:
// Db2递归查询写法with par_test(test_child,test_parent) as(
     select test_child,test_parent from t_test where child='grandchild'  -- 设置递归起点
     union all
     select t.test_child,t.test_parent from par_test pt,t_test t where pt.test_parent = t.test_child ----递归的方向为从子向父)select distinct test_parent from par_test
登入後複製

db2與oracle的sql語句有什麼差別
db2與oracle的sql語句有什麼差別 如上圖,從grandchild開始查詢其所有的父節點,先設定虛擬表起點,即左邊第四行;依序往上推,其父親是son = 上一行的child,即VT.parent = T.child…

最後查詢結果為:

test_parentson##father grandpa
#10.資料型別有差異

比较大的差别:
1. char大小对比
   Oracle: char 2000
   DB2   : char 254
2. 日期类型
   Oracle: date datetime
   DB2   :date(日期) time(时间)timestamp(日期时间)
登入後複製

# 11.關於rowId

Oracle中它是由数据库唯一产生的,在程序中可以获得
DB2  在V8版本才有此功能
登入後複製

12.decode方法

Oracle: 
	decode方法(decode(条件,值1,翻译值1,值2,翻译值2,...,值n,翻译值n,缺省值)) 【函数用法在下边有链接】
	或者
	case语句

DB2:
	只有case表达式

	示例语句:
	select id,name,
		case when integer(flag)=0 then '假'
			 when integer(flag)=1 then '真'
		else '异常' end
	from test
	或者
	select id,name,
		case integer(flag) when 0 then '假' 
						   when 1 then '真'
		else '异常' end
	from test
登入後複製
推薦教學:《

Oracle影片教學

以上是db2與oracle的sql語句有什麼差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

oracle打不開怎麼辦 oracle打不開怎麼辦 Apr 11, 2025 pm 10:06 PM

Oracle 打不開的解決辦法包括:1. 啟動數據庫服務;2. 啟動監聽器;3. 檢查端口衝突;4. 正確設置環境變量;5. 確保防火牆或防病毒軟件未阻止連接;6. 檢查服務器是否已關閉;7. 使用 RMAN 恢復損壞的文件;8. 檢查 TNS 服務名稱是否正確;9. 檢查網絡連接;10. 重新安裝 Oracle 軟件。

oracle游標關閉怎麼解決 oracle游標關閉怎麼解決 Apr 11, 2025 pm 10:18 PM

解決 Oracle 游標關閉問題的方法包括:使用 CLOSE 語句顯式關閉游標。在 FOR UPDATE 子句中聲明游標,使其在作用域結束後自動關閉。在 USING 子句中聲明游標,使其在關聯的 PL/SQL 變量關閉時自動關閉。使用異常處理確保在任何異常情況下關閉游標。使用連接池自動關閉游標。禁用自動提交,延遲游標關閉。

oracle怎麼循環創建游標 oracle怎麼循環創建游標 Apr 12, 2025 am 06:18 AM

Oracle 中,FOR LOOP 循環可動態創建游標, 步驟為:1. 定義游標類型;2. 創建循環;3. 動態創建游標;4. 執行游標;5. 關閉游標。示例:可循環創建游標,顯示前 10 名員工姓名和工資。

oracle數據庫如何分頁 oracle數據庫如何分頁 Apr 11, 2025 pm 08:42 PM

Oracle 數據庫分頁利用 ROWNUM 偽列或 FETCH 語句實現:ROWNUM 偽列用於通過行號過濾結果,適用於復雜查詢。 FETCH 語句用於獲取指定數量的第一行,適用於簡單查詢。

oracle數據庫怎麼停止 oracle數據庫怎麼停止 Apr 12, 2025 am 06:12 AM

要停止 Oracle 數據庫,請執行以下步驟:1. 連接到數據庫;2. 優雅關機數據庫(shutdown immediate);3. 完全關機數據庫(shutdown abort)。

HDFS配置CentOS需要哪些步驟 HDFS配置CentOS需要哪些步驟 Apr 14, 2025 pm 06:42 PM

在CentOS系統上搭建Hadoop分佈式文件系統(HDFS)需要多個步驟,本文提供一個簡要的配置指南。一、前期準備安裝JDK:在所有節點上安裝JavaDevelopmentKit(JDK),版本需與Hadoop兼容。可從Oracle官網下載安裝包。環境變量配置:編輯/etc/profile文件,設置Java和Hadoop的環境變量,使系統能夠找到JDK和Hadoop的安裝路徑。二、安全配置:SSH免密登錄生成SSH密鑰:在每個節點上使用ssh-keygen命令

oracle動態sql怎麼創建 oracle動態sql怎麼創建 Apr 12, 2025 am 06:06 AM

可以通過使用 Oracle 的動態 SQL 來根據運行時輸入創建和執行 SQL 語句。步驟包括:準備一個空字符串變量來存儲動態生成的 SQL 語句。使用 EXECUTE IMMEDIATE 或 PREPARE 語句編譯和執行動態 SQL 語句。使用 bind 變量傳遞用戶輸入或其他動態值給動態 SQL。使用 EXECUTE IMMEDIATE 或 EXECUTE 執行動態 SQL 語句。

oracle日誌寫滿怎麼辦 oracle日誌寫滿怎麼辦 Apr 12, 2025 am 06:09 AM

Oracle 日誌文件寫滿時,可採用以下解決方案:1)清理舊日誌文件;2)增加日誌文件大小;3)增加日誌文件組;4)設置自動日誌管理;5)重新初始化數據庫。在實施任何解決方案前,建議備份數據庫以防數據丟失。

See all articles