<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 9.17\. 條件表達式 本節描述在PostgreSQL里可用的SQL兼容的條件表達式。 > **Tip:** 如果你的需求超過這些條件表達式的能力,你可能會希望用一種更富表現力的編程語言寫一個存儲過程。 ## 9.17.1\. `CASE` `CASE`表達式是一種通用的條件表達式,類似于其它編程語言中的 if/else 語句。 ``` CASE WHEN _condition_ THEN _result_ [WHEN ...] [ELSE `_result_`] END ``` `CASE`子句可以用于任何表達式可以存在的地方。`_condition_` 是一個返回`boolean`的表達式。如果條件的結果為真,那么`CASE` 表達式的結果就是符合條件的`_result_`,并且不再處理剩余的 `CASE`表達式。如果條件的結果為假,那么以相同方式搜尋任何隨后的`WHEN` 子句。如果沒有`WHEN` `_condition_`為真, 那么表達式的結果就是在`ELSE`子句里的`_result_`。 如果省略了`ELSE`子句且沒有匹配的條件,結果為 NULL 。 一個例子: ``` SELECT * FROM test; a --- 1 2 3 SELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 'other' END FROM test; a | case ---+------- 1 | one 2 | two 3 | other ``` 所有`_result_`表達式的數據的類型都必須可以轉換成單一的輸出類型。 參閱[Section 10.5](#calibre_link-454)獲取更多細節。 下面這個"簡單的"`CASE`表達式是上面的通用形式的一個特殊的變種: ``` CASE _expression_ WHEN _value_ THEN _result_ [WHEN ...] [ELSE `_result_`] END ``` 先計算`_expression_`的值,然后與每個`WHEN` 子句里聲明的`_value_`表達式對比,直到找到一個相等的。 如果沒有找到匹配的,則返回在`ELSE`子句里的`_result_` (或者 NULL)。這個類似于 C 里的`switch`語句。 上面的例子可以用簡單`CASE`語法來寫: ``` SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END FROM test; a | case ---+------- 1 | one 2 | two 3 | other ``` `CASE`表達式并不計算任何對于判斷結果并不需要的子表達式。比如, 下面是一個可以避免被零除的方法: ``` SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END; ``` > **Note:** 正如在[Section 35.6](#calibre_link-734)描述的那樣,被`IMMUTABLE` 標記的函數和操作符在計劃查詢時評估,而不是在執行時。 這意味著沒有在查詢執行時評估的子表達式的常量部分可能仍會在查詢計劃時評估。 ## 9.17.2\. `COALESCE` ``` COALESCE(_value_ [, ...]) ``` `COALESCE`返回它的第一個非 NULL 的參數值。如果所有參數都是null那么返回null。 它常用于在顯示數據時用缺省值替換 NULL 。比如: ``` SELECT COALESCE(description, short_description, '(none)') ... ``` 如果`description`非空那么返回它,否則如果`short_description`非空則返回它, 否則返回`(none)`。 和`CASE`表達式一樣,`COALESCE`只計算需要用來判斷結果的參數; 也就是說,在第一個非空參數右邊的參數不會被計算。 這個符合 SQL 標準的函數提供了與某些其它數據庫系統中的`NVL` 和`IFNULL`類似的功能。 ## 9.17.3\. `NULLIF` ``` NULLIF(_value1_, _value2_) ``` 當且僅當`_value1_`等于`_value2_`時, `NULLIF`才返回 null 。否則它返回`_value1_`。 這些可以用于執行上面給出的`COALESCE`例子的反例: ``` SELECT NULLIF(value, '(none)') ... ``` 在這個例子中,如果`value`是`(none)`那么返回 null,否則返回`value`。 ## 9.17.4\. `GREATEST` and `LEAST` ``` GREATEST(_value_ [, ...]) ``` ``` LEAST(_value_ [, ...]) ``` `GREATEST`和`LEAST`函數從一個任意數字表達式的列表里選取最大或者最小的數值。 這些表達式必須都可以轉換成一個普通的數據類型,它將會是結果類型(參閱[Section 10.5](#calibre_link-454) 獲取細節)。列表中的 NULL 值將被忽略。只有所有表達式的結果都是 NULL 的時候,結果才會是 NULL 。 請注意`GREATEST`和`LEAST`都不是 SQL 標準,但卻是很常見的擴展。 某些其他的數據庫在任意一個參數為NULL時返回NULL,而不是所有參數都是NULL時。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看