Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Memformat Nomor Telepon di SQL Server (T-SQL)

Berikut adalah beberapa contoh pemformatan nomor telepon di SQL Server.

Ini termasuk contoh pemformatan angka dalam format E.164 (untuk nomor internasional), menambahkan kode negara dan kode area di awal, serta menghilangkan nol di depan dari kode negara bila diperlukan.

Nomor Telepon Numerik

Jika nomor telepon disimpan sebagai nilai numerik (yang seharusnya tidak), Anda dapat menggunakan FORMAT() berfungsi untuk memformatnya sebagai nomor telepon.

Contoh:

SELECT FORMAT(0234567890, '000-000-0000');

Hasil:

023-456-7890

Argumen pertama adalah nomor telepon dan argumen kedua adalah format string. Dalam contoh ini saya menggunakan string format khusus. Anda dapat menyesuaikan string format agar sesuai dengan format nomor telepon yang diinginkan:

SELECT FORMAT(0234567890, '(000) 000-0000');

Hasil:

(023) 456-7890

Penting untuk mengetahui apa yang sebenarnya dilakukan oleh string format. Saat menggunakan angka nol, Anda harus memastikan bahwa nomor telepon benar-benar memiliki angka di setiap tempat di mana ada penentu format nol (jika tidak, Anda mungkin tidak sengaja menambahkan angka nol ke nomor tersebut).

Anda juga harus memastikan bahwa ada penentu format untuk mencocokkan setiap digit (jika tidak, Anda akan menghapus digit dari nomor telepon).

Cara lain untuk mengekspresikan format string adalah dengan # penentu format. Namun, ini akan menyebabkan nol di depan dihapus dari nomor telepon.

Berikut ini contoh untuk menggambarkan apa yang saya maksud:

SELECT 
    FORMAT(0234567890, '000-000-0000') AS "000-000-0000",
    FORMAT(0234567890, '###-###-####') AS "###-###-####";

Hasil:

+----------------+----------------+
| 000-000-0000   | ###-###-####   |
|----------------+----------------|
| 023-456-7890   | 23-456-7890    |
+----------------+----------------+

FORMAT() fungsi hanya menerima tipe numerik dan nilai datetime. Jika nomor telepon yang dimasukkan sebenarnya bukan tipe numerik, Anda mungkin akan mendapatkan pesan kesalahan, seperti ini:

SELECT FORMAT('0234567890', '000-000-0000');

Hasil:

Msg 8116, Level 16, State 1, Line 1
Argument data type varchar is invalid for argument 1 of format function.

Dalam kasus seperti itu, cukup mudah untuk mengonversi nilai menjadi tipe numerik:

SELECT FORMAT(CAST('0234567890' AS int), '000-000-0000');

Hasil:

023-456-7890

Tetapi nomor telepon tidak boleh disimpan sebagai tipe numerik.

Nilai numerik dapat dibulatkan ke atas atau ke bawah, melakukan perhitungan, menghilangkan nol yang tidak signifikan secara otomatis, dll.

Nomor telepon adalah nilai tetap. Setiap digit adalah signifikan (termasuk angka nol di depan). Kami tidak ingin angka nol di depan hilang kecuali kami secara eksplisit mewajibkan ini (untuk kode negara misalnya). Dan kami tidak ingin nomor telepon kami dibulatkan ke atas atau ke bawah secara tidak sengaja. Dan sepertinya Anda tidak perlu melakukan perhitungan pada nomor telepon Anda.

Jadi karena itu lebih masuk akal untuk menyimpan nomor telepon sebagai string. Mengonversinya menjadi tipe numerik sebelum memformatnya (seperti pada contoh di atas) masih dapat mengakibatkan perubahan tak terduga pada nomor tersebut.

Jika nomor telepon sudah berupa string, maka coba cara berikut.

Nomor Telepon Disimpan sebagai String

Jika nomor telepon disimpan sebagai string, Anda dapat menggunakan STUFF() berfungsi untuk memasukkan string yang sesuai ke nomor telepon di tempat yang relevan.

Contoh:

SELECT
    STUFF(STUFF('0234567890', 7, 0, '-'), 4, 0, '-') AS "Format 1",
    STUFF(STUFF(STUFF('0234567890', 7, 0, '-'), 4, 0, ') '), 1, 0, '(') AS "Format 2";

Hasil:

+--------------+----------------+
| Format 1     | Format 2       |
|--------------+----------------|
| 023-456-7890 | (023) 456-7890 |
+--------------+----------------+

Argumen pertama adalah string asli (dalam hal ini, nomor telepon), dan argumen keempat adalah string yang akan disisipkan. Argumen kedua menentukan tempat untuk menyisipkan argumen keempat.

Argumen ketiga menentukan berapa banyak karakter yang akan dihapus dari string asli (jika Anda ingin mengganti karakter tertentu dengan string baru). Dalam kasus kami, kami tidak ingin menghapus karakter apa pun, jadi kami menggunakan 0 .

Bergantung pada format nomor telepon asli, cara lain untuk melakukannya adalah dengan menggunakan REPLACE() fungsi. Contoh di mana ini bisa berguna adalah ketika nomor telepon sudah diformat dengan pemisah, tetapi perlu diganti dengan pemisah lain:

SELECT REPLACE('023 456 7890', ' ', '-');

Hasil:

023-456-7890

Nomor Internasional

E.164 adalah standar internasional yang mendefinisikan format nomor telepon internasional.

Nomor E.164 diformat [+][country code][area code][local phone number] dan dapat memiliki maksimal lima belas digit.

Berikut adalah contoh yang menggunakan dua metode untuk menggabungkan kode negara, kode area, dan nomor telepon:

SELECT 
    CONCAT('+', '1', '415', '4567890') AS 'CONCAT() Function',
    '+' + '1' + '415' + '4567890' AS 'Concatenation Operator';

Hasil:

+---------------------+--------------------------+
| CONCAT() Function   | Concatenation Operator   |
|---------------------+--------------------------|
| +14154567890        | +14154567890             |
+---------------------+--------------------------+

Metode pertama menggunakan CONCAT() fungsi, dan yang kedua menggunakan operator gabungan (+ ).

Contoh itu memformat nomor yang berbasis di AS. Di banyak negara, kode area memiliki angka nol di depan yang harus dihilangkan saat menggunakan format E.164.

Salah satu cara untuk menekan angka nol di depan adalah dengan mengonversi kode area menjadi nilai numerik dan kembali lagi.

Berikut adalah contoh penggunaan teknik tersebut pada nomor berbasis Inggris:

SELECT CONCAT(
        '+', 
        '44', 
        CAST(CAST('020' AS int) AS varchar(3)), 
        '34567890'
        );

Hasil:

+442034567890

Dalam hal ini nol di depan dihilangkan.

Berikut kode yang sama yang dijalankan terhadap nomor berbasis AS sebelumnya (yang tidak menggunakan nol di depan dalam kode negara):

SELECT CONCAT(
        '+', 
        '1', 
        CAST(CAST('415' AS int) AS varchar(3)), 
        '4567890'
        );

Hasil:

+14154567890

Kali ini kode negara tetap tiga digit.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Buat Server Tertaut di SQL Server (Contoh T-SQL)

  2. OPENXML dengan xmlns:dt

  3. Apakah ada .NET yang setara dengan newsequentialid() SQL Server ()

  4. Setara dengan LIMIT dan OFFSET untuk SQL Server?

  5. Batasan tabel silang MS SQL Server