<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-26  評論-13  文章-46  trackbacks-0

    In Oracle/PLSQL, the decode function has the functionality of an IF-THEN-ELSE statement.

    The syntax for the decode function is:

    decode( expression , search , result [, search , result]... [, default] )

    expression is the value to compare.

    search is the value that is compared against expression.

    result is the value returned, if expression is equal to search.

    default is optional. If no matches are found, the decode will return default. If default is omitted, then the decode statement will return null (if no matches are found).


    For Example:

    You could use the decode function in an SQL statement as follows:

    SELECT supplier_name,
    decode(supplier_id, 10000, 'IBM',
    10001, 'Microsoft',
    10002, 'Hewlett Packard',
    'Gateway') result
    FROM suppliers;

    The above decode statement is equivalent to the following IF-THEN-ELSE statement:

    IF supplier_id = 10000 THEN
    ???? result := 'IBM';

    ELSIF supplier_id = 10001 THEN
    ??? result := 'Microsoft';

    ELSIF supplier_id = 10002 THEN
    ??? result := 'Hewlett Packard';

    ELSE
    ??? result := 'Gateway';

    END IF;


    The decode function will compare each supplier_id value, one by one.


    Frequently Asked Questions


    Question:? One of our viewers wanted to know how to use the decode function to compare two dates (ie: date1 and date2), where if date1 > date2, the decode function should return date2. Otherwise, the decode function should return date1.

    Answer:? To accomplish this, use the decode function as follows:

    decode((date1 - date2) - abs(date1 - date2), 0, date2, date1)

    The formula below would equal 0, if date1 is greater than date2:

    (date1 - date2) - abs(date1 - date2)


    Question:? I would like to know if it's possible to use decode for ranges of numbers, ie 1-10 = 'category 1', 11-20 = 'category 2', rather than having to individually decode each number.

    Answer: Unfortunately, you can not use the decode for ranges of numbers. However, you can try to create a formula that will evaluate to one number for a given range, and another number for the next range, and so on.

    For example:

    SELECT supplier_id,
    decode(trunc ((supplier_id - 1) / 10), 0, 'category 1',
    1, 'category 2',
    2, 'category 3',
    'unknown') result
    FROM suppliers;

    In this example, based on the formula:

    trunc ((supplier_id - 1) / 10

    The formula will evaluate to 0, if the supplier_id is between 1 and 10.
    The formula will evaluate to 1, if the supplier_id is between 11 and 20.
    The formula will evaluate to 2, if the supplier_id is between 21 and 30.

    and so on...


    Question:? I need to write a decode statement that will return the following:

    If yrs_of_service < 1 then return 0.04
    If yrs_of_service >= 1 and < 5 then return 0.04
    If yrs_of_service > 5 then return 0.06

    How can I do this?

    Answer:? You will need to create a formula that will evaluate to a single number for each one of your ranges.

    For example:

    SELECT emp_name,
    decode(trunc (( yrs_of_service + 3) / 4), 0, 0.04,
    1, 0.04,
    0.06) as perc_value
    FROM employees;

    Helpful Tip: One of our viewers suggested combining the SIGN function with the DECODE function as follows:

    The date example above could be modified as follows:

    DECODE(SIGN(date1-date2), 1, date2, date1)

    The SIGN/DECODE combination is also helpful for numeric comparisons e.g. Sales Bonuses

    DECODE(SIGN(actual-target), -1, 'NO Bonus for you', 0,'Just made it', 1, 'Congrats, you are a winner')

    posted on 2006-04-04 12:51 似水流年 閱讀(460) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 国产精品免费观看视频| 国产99精品一区二区三区免费| 丁香花在线视频观看免费| 成全视频免费观看在线看| 亚洲午夜激情视频| 亚洲天堂2016| 免费看国产精品3a黄的视频| 亚洲无av在线中文字幕| 国产免费高清69式视频在线观看| 国产又黄又爽又猛免费app| 区久久AAA片69亚洲| 免费无码黄网站在线看| 亚洲邪恶天堂影院在线观看| 久久久亚洲精华液精华液精华液 | 国产亚洲人成在线影院| 久久精品中文字幕免费| 免费一区二区三区四区五区| 免费又黄又爽又猛大片午夜| 亚洲精品tv久久久久久久久久| 亚洲成人激情小说| 国产精品白浆在线观看免费| 亚洲性天天干天天摸| 波多野结衣免费在线| 亚洲人成网www| 在线观看免费人成视频色9| 亚洲第一成年网站视频 | 中文字幕成人免费高清在线视频| 亚洲精品美女久久久久99| 美女被羞羞网站免费下载| 亚洲精品制服丝袜四区| 69堂人成无码免费视频果冻传媒| 国产精品亚洲AV三区| 亚洲成AV人片天堂网无码| 国色精品卡一卡2卡3卡4卡免费| 久久无码av亚洲精品色午夜 | 亚洲日本在线免费观看| 免费黄色app网站| 中文在线免费看视频| 亚洲欧洲校园自拍都市| 亚洲av无码乱码在线观看野外| 免费网站看av片|