9.13. �������ʽ

���������� PostgreSQL ������õ�SQL���ݵ��������ʽ��

��ʾ: ���������󳬹���Щ�������ʽ������������ܻ�ϣ����һ�ָ����������ı������дһ���洢���̡�

9.13.1. CASE

SQL CASE ���ʽ��һ��ͨ�õ��������ʽ�����������������е� if/else ��䡣

CASE WHEN condition THEN result
     [WHEN ...]
     [ELSE result]
END

CASE �Ӿ���������κα��ʽ������Ч���ڵĵط��� condition ��һ������boolean �ı��ʽ�� ������Ϊ�棬��ô CASE ���ʽ�Ľ�����Ƿ��������� result�� ������Ϊ�٣���ô����ͬ��ʽ��Ѱ�κ����� WHEN �Ӿ䡣 ���û�� WHEN condition Ϊ�棬��ô case ���ʽ�Ľ�������� ELSE �Ӿ����ֵ�� ���ʡ���� 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 ��ȡϸ�ڡ�

�������"�򵥵�" 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;

9.13.2. COALESCE

COALESCE(value[, ...])

COALESCE �������ĵ�һ���� NULL �IJ�����ֵ�� ����������Ϊ��ʾĿ�ļ�������ʱ��ȱʡֵ�滻 NULL ֵ�� ���磺

SELECT COALESCE(description, short_description, '(none)') ...

�� CASE ���ʽһ����COALESCE ������ ���㲻��Ҫ�����жϽ���IJ�����Ҳ����˵���ڵ�һ���ǿղ����ұߵIJ������ᱻ ���㡣

9.13.3. NULLIF

NULLIF(value1, value2)

���ҽ��� value1 �� value2 ���ʱ��NULLIF �ŷ��� NULL�� ���������� value1�� ��Щ��������ִ����������� COALESCE ���ӵķ�����

SELECT NULLIF(value, '(none)') ...