テーブル名student
のデータベースがあります。
学生のregister_number
とphone_number
を表示したいと思います。
phone_number
の形式は次のとおりです。
+91-123-456-7890
そして、phone_numberがNULL
の場合、N/A
が表示されます。
テーブルは次のようになります。
R_NO | STUDENT_NAME | PHONE_NUMBER
-------------------------------------------------------
1 | Rajesh | 9632545123
2 | Sridevi | 9512647359
3 | Shiva | 9632155862
4 | HariHaran | 8426911231
5 | Ravi | 9111558899
6 | Pauline | NULL
1つの部分couldは次のように処理されます:
IFNULL(phone_number, 'N/A');
ただし、実際には、フォーマット要件はSQLではなく、アプリケーションコードで行うのが最善です。
地域によって、プレフィックスの桁数が異なります( wikipedia's list ):
COALESCE(CONCAT('+',
CASE
WHEN LEFT(phone_number, 1) IN ('1', '7')
THEN INSERT(INSERT(INSERT(phone_number, 2, 0, '-'), 6, 0, '-'), 10, 0, '-')
WHEN CONVERT(LEFT(phone_number, 2), SIGNED) IN (21, 22, 23, 24, 25, 26, 29, 35, 37, 38, 42, 50, 59,
67, 68, 69, 80, 85, 87, 88, 96, 97, 99)
THEN INSERT(INSERT(INSERT(phone_number, 4, 0, '-'), 8, 0, '-'), 12, 0, '-')
ELSE INSERT(INSERT(INSERT(phone_number, 3, 0, '-'), 7, 0, '-'), 11, 0, '-') END), 'N/A')
上記のクエリでは、すべての電話番号は+Country_code-XXX-XXX-XXXX
と表示されますが、各エリアには特定のフォーマットルールがあり、大きく異なります。そのため、フォーマットが+54-X-XXXX-XXXX
であるオーストラリアなど、特定の地域ではフォーマットがおかしいように見えます。
以下のリンクには、次のように機能するマスク関数のコードがあります。
SELECT mask(991234567890, '+##-###-###-####')
-> +99-123-456-7890
N/Aに関しては、次のようなものが機能するはずです。
SELECT IfNull(phone_number, 'N/A')