ENES TAŞ

Senior Software Developer

MS SQL'de Telefon Numarası Formatlama 11.8.2017

Bir web sitesi ya da herhangi bir proje geliştirirken, telefon, e-mail adresi gibi alanlarda maskeleme kullanmaya ihtiyaç duyuyoruz. Peki ya geliştirdiğiniz sisteme excelden kayıt aktarmanız gerekiyorsa veya eski veritabanından düzensiz formatta kayıt aktarmanız gerekiyorsa? İşler o zaman biraz can sıkıcı hale gelebiliyor. 

Başıma böyle bir durum geldi, geliştirmiş olduğum sistemin eski veritabanındaki müşteri kayıtlarını yeni sisteme aktarmam gerekiyordu ve telefon numaraları maskeleme olmamasından dolayı çok dağınık kaydedilmişti. Bende bunun için sql de küçük bir function yazdım. 

Sistem de kullanmış olduğum maskeleme formatı "553-278-07-69" bu şekildeydi. Aktarmak istediğim verilerde telefon numaraları "05532780769", "5532780769" yada alan kodu olmadan "2780769" ya da aralarında boşluklar olacak şekilde kaydedilmişti. Böyle bir veriyi maskeleme uyguladığım elemente set etmek istediğim de edemiyordum, kullandığım jquery maskeleme eklentisi bu işi benim için çözemiyordu :)

sql de yazdığım function yardımıyla verileri düzenli bir şekilde aktardım.

Create Function [dbo].[PhoneFormat]

(@Phone nvarchar(20))

returns nvarchar(20)

as

begin


Declare @ReturnPhone nvarchar(20);


Set @ReturnPhone = (


Case


When len(replace(@Phone,' ',''))=10

then LEFT(replace(@Phone, ' ',''), 3) + '-' + SUBSTRING(replace(@Phone, ' ',''), 4,3) + '-' +

SUBSTRING(replace(@Phone, ' ',''), 7,2) + '-' + RIGHT(replace(@Phone, ' ',''),2)


When  len(replace(@Phone,' ',''))=11

then SUBSTRING(replace(@Phone, ' ',''), 2,3) + '-' + SUBSTRING(replace(@Phone, ' ',''), 5,3) + '-' +

SUBSTRING(replace(@Phone, ' ',''), 8,2) + '-' + RIGHT(replace(@Phone, ' ',''),2)


When  len(replace(@Phone,' ',''))=7

then  LEFT(replace('000' + @Phone, ' ',''), 3) + '-' + SUBSTRING(replace('000' + @Phone, ' ',''), 4,3) + '-' +

SUBSTRING(replace('000' + @Phone, ' ',''), 7,2) + '-' + RIGHT(replace('000' + @Phone, ' ',''),2)


else @Phone

end

);

return @ReturnPhone;

end

Kullanımı ise şu şekilde; 

Select dbo.PhoneFormat('05532780769')


Sonuç : 553-278-07-69

Select dbo.PhoneFormat('5532780769')


Sonuç : 553-278-07-69

Select dbo.PhoneFormat('2780769')


Sonuç : 000-278-07-69   


Ben eğer başında alan kodu yok ise 000 eklemeyi tercih ettim. Benim o anlık işimi çözdü, umarım sizin de işinize yarar :)

Kolay gelsin.

Emre - 15.08.2017 20:47

Çok işime yaradı, ellerine sağlık hocam :)

Yorum Yap