DECODE işlevi, sağlanan parametrelere bağlı olarak iki farklı amaçla kullanılır. Bu işlev, IF-THEN-ELSE koşullu dallanma yapısı olarak veya belirli bir kodlama biçimindeki bir dizenin çözümlemesi için kullanılabilir. Bu konuda her iki kullanım durumu için sözdizimi açıklanmakta ve örnekler sunulmaktadır.
IF-THEN-ELSE dal seçimi
Sözdizimi
DECODE(<expression>, <search>, <result>[, <search>, <result>]...[, <default>])
Parametreler
|
|
|
|
|
|
|
|
|
|
|
expression ile karşılaştırılacak arama öğesi. |
|
|
|
search ve expression eşleştiğinde döndürülecek değer. |
|
|
|
|
Tüm result değerleri aynı veri türünde olmalı veya NULL olmalıdır. Veri türleri tutarsızsa hata döndürülür.
expression ve tüm search değerleri aynı veri türünde olmalıdır. Aksi takdirde hata döndürülür.
Dönüş değeri
Eşleşme bulunursa ilgili result değeri döndürülür.
Eşleşme bulunmazsa default değeri döndürülür.
default belirtilmemişse NULL döndürülür.
Birden fazla search seçeneğinde eşleşen bir değer varsa ilk oluşuma ait sonuç döndürülür.
MaxCompute SQL genellikle
NULL=NULLifadesini değerlendirirken NULL döndürür. Ancak DECODE işlevi NULL değerini NULL'a eşit kabul eder.
Örnek
sale_detail adlı tablo; shop_name string, customer_id string ve total_price double alanlarını içerir. Tablo aşağıdaki verileri içermektedir:
+------------+-------------+-------------+------------+------------+
| shop_name | customer_id | total_price | sale_date | region |
+------------+-------------+-------------+------------+------------+
| s1 | c1 | 100.1 | 2013 | china |
| s2 | c2 | 100.2 | 2013 | china |
| s3 | c3 | 100.3 | 2013 | china |
| null | c5 | NULL | 2014 | shanghai |
| s6 | c6 | 100.4 | 2014 | shanghai |
| s7 | c7 | 100.5 | 2014 | shanghai |
+------------+-------------+-------------+------------+------------+
Aşağıdaki komut bir örnektir.
-- If customer_id is 'c1', return 'Taobao'. If it is 'c2', return 'Alipay'. If it is 'c3', return 'Aliyun'. If it is NULL, return 'N/A'. Otherwise, return 'Others'.
SELECT DECODE(customer_id, 'c1', 'Taobao', 'c2', 'Alipay', 'c3', 'Aliyun', Null, 'N/A', 'Others') AS RESULT FROM sale_detail;
-- This is equivalent to the following statement.
IF customer_id = c1 THEN RESULT := 'Taobao';
ELSEIF customer_id = c2 THEN RESULT := 'Alipay';
ELSEIF customer_id = c3 THEN RESULT := 'Aliyun'; ...
ELSE RESULT := 'Others';
END IF;
Aşağıdaki sonuç döndürülür:
+------------+
| result |
+------------+
| Others |
| Others |
| Others |
| Taobao |
| Alipay |
| Aliyun |
+------------+
Belirtilen biçimden bir dizeyi çözümleme
Sözdizimi
STRING DECODE(BINARY <str>, STRING <charset>)
Parametreler
Parametre | Zorunlu | Açıklama |
str | Evet | BINARY türü. Çözümlemek istediğiniz dize. |
charset | Evet | STRING türü. Kodlama biçimi. Geçerli değerler: UTF-8, UTF-16, UTF-16LE, UTF-16BE, ISO-8859-1 ve US-ASCII. Not ISO-8859-1 ve US-ASCII kodlama biçimleri yalnızca İngilizce karakterlerin kodlamasını ve çözümlemesini destekler. Çince karakterler desteklenmez. |
Dönüş değeri
STRING türünde bir değer döndürür. str veya charset NULL ise işlev NULL döndürür.
Örnekler
-
Örnek 1: Aşağıdaki komut "Chinese sample" dizesini UTF-8 biçiminde kodlar.
-- Encode and decode SELECT DECODE(ENCODE("Chinese sample","UTF-8"), "UTF-8");Aşağıdaki sonuç döndürülür:
+-----+ | _c0 | +-----+ | Chinese sample | +-----+ -
Örnek 2: Giriş parametresi NULL'dur. Aşağıdaki komutu çalıştırın:
SELECT DECODE(ENCODE("Chinese sample","UTF-8"), NULL);Aşağıdaki sonuç döndürülür:
+-----+ | _c0 | +-----+ | NULL | +-----+
İlgili işlevler
DECODE işlevi hem çeşitli işlevler hem de dize işlevleri kategorisinde sınıflandırılır. Diğer çeşitli işlevler hakkında daha fazla bilgi için bkz. Diğer işlevler. Diğer dize işlevleri hakkında daha fazla bilgi için bkz. Dize işlevleri.