ホームページ  >  記事  >  Oracle と db2 SQL の違いは何ですか

Oracle と db2 SQL の違いは何ですか

小老鼠
小老鼠オリジナル
2023-07-05 14:55:361272ブラウズ

oracle と db2 の SQL の違い: 1. Oracle は「create table a as select * from b」を使用して同様のテーブルを作成し、db2 は「create table a like b」を使用して同様のテーブルを作成します。 2. Oracle "to_char" 関数変換を使用します。db2 は varchar 型変換を使用します。

Oracle と db2 SQL の違いは何ですか

このチュートリアルのオペレーティング システム: Windows 10 システム、Oracle バージョン 19c、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 <= N;
DB2    :
    select * from a fetch first N rows only;

4. システム時刻構文を取得します

Oracle :
    select sysdate from dual;
DB2    :
    select current timestamp from sysibm.sysdummy1;

5. さまざまな null 値変換メソッド

Oracle :
    select col1,col2,nvl(col3,&#39;0&#39;) from tablename; (判断col3字段是否为空,不为空就输出原来的数值,为空就输出0)
DB2   :
    select col1,col2,value(col3,&#39;0&#39;) from tablename;
     
    (mysql和Db2可以使用Coalesce(col3,&#39;0&#39;)函数来实现上述功能)

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,&#39;YYYY-MM-DD HH24:MI:SS&#39;) from dual;
DB2    :
    select varchar(current timestamp) from sysibm.sysdummy1;

分析:

Oracle数据类型改变函数:to_char()、to_date()、to_number()等;
    如果仅仅取年,月,日等,可以用
        to_char(sysdate, &#39;YYYY&#39;),
        to_char(&#39;MM&#39;) ,
        to_char(&#39;DD&#39;)取得。
    只取年月日TRUNC(SYSDATE)。
    取时分秒TO_CHAR(SYSDATE,&#39;HH24:MI:SS&#39;)。
 
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(&#39;2002-10-2012:00:00&#39;),
        DATE(&#39;2002-10-20&#39;),
        DATE(&#39;10/20/2002&#39;),
        TIME(&#39;12:00:00&#39;)

現在、DB2 V8 は to_char と to_date もサポートしており、V9 バージョンには to_number

# が追加されています。 ## 7. 文字列を日付に変換するさまざまな方法 (To_Number/cast)

Oracle:
    select to_number(&#39;123&#39;) from dual;
    select cast(&#39;123&#39; as integer) from dual;
DB2   :
    select cast(&#39;123&#39; 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 = &#39;son&#39; )

Oracle と db2 SQL の違いは何ですか

詳細: Oracle 階層クエリ (再帰クエリ): 開始...前およびレベルのキーワードで接続

DB2:

// Db2递归查询写法with par_test(test_child,test_parent) as(
     select test_child,test_parent from t_test where child=&#39;grandchild&#39;  -- 设置递归起点
     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

Oracle と db2 SQL の違いは何ですか

上図に示すように、孫から開始してすべての親ノードをクエリします。最初に仮想テーブルの開始点 (左の 4 行目) を設定し、上に押します。順番に、その父親はson = upです。子の1行、つまり、VT.parent = T.child...

最終的なクエリ結果は次のとおりです:

test_parent

son

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 &#39;假&#39;
             when integer(flag)=1 then &#39;真&#39;
        else &#39;异常&#39; end
    from test
    或者
    select id,name,
        case integer(flag) when 0 then &#39;假&#39;
                           when 1 then &#39;真&#39;
        else &#39;异常&#39; end
    from test

以上がOracle と db2 SQL の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。