SQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
SQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

26 Temmuz 2020 Pazar

Oracle'da Kolondaki Data Formatlarını Bulmak

Merhaba Arkadaşlar,

Oracle'da bir kolonunuz var diyelim ki. Best practice olarak kolonu data tipi, gerekirse validasyonlarla kontrol edebiliriz. Ancak bazen dba'lerin önem vermemesi ya da uygulama operasyonlarının ilgisizliği veyahut ilgili analist/geliştiricinin kötü tasarımı/geliştirmesi ile(bazen de hızlı canlıya çıkma ihtiyacının bir sonucu olarak) bazı alanlarda bozuk formatlarda data girilebilir.
Bizim ihtiyacımız da bu formatları bulmak ve düzenlemek idi. Örneğin müşteri numarası ya da telefon numarası gibi nümerik bir alan girişi olduğunu düşünün. Tüm formatları nasıl bulurdunuz?

Şöyle yapabiliriz, ki muhtemelen daha güzel çözümler vardır, tüm sayıları 0'a çevirip, öncelikle sayıları eşitledik. Sonra da distinct kolonu çektik. Böylece kaç tipte data var görmüş oluruz.

select distinct
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(replace(a.TelNo,9,0),8,0),7,0),6,0),5,0),4,0),3,0),2,0),1,0) as alan
from gurkan_tablo_yedek a 

Örneğin şöyle sonuçlar dönebilir:
00/000/-000-00
00/000/-000000
00/000/00000/00
00/000/000000
00/000/00
0/000/0000000
0000000000
00/0000000000
00/000/000000/00

Hepsini sıfıra çevirme nedenim de, sonuçlardan göreceğimiz üzere, her bir sayı için farklı sonuç gelmemesi içindi.

Sonra görüşürüz.

10 Ocak 2017 Salı

SQL: Kolon İçeriğinde Değişim

Selamlar,
Sql'de ifade içindeki minik bir kısmı değiştirme ihtiyacım oldu. Belki işi düşen olursa, hızlıca kullansın diye paylaşıyorum. Bu arada Rusya'dan bir mail aldım; bir konuda yazımdan bir şey alaşılmamış, ödev konusuymu vs. Ara Ara orijinal ifadelerini de yazımda değinmeye çalışacağım, özellikle teknik konularda.

Bir kolon içindeki ifadeyi, başka bir ifade ile değiştirme(find a text --> replace with another text, using replace() function)
degisecekIfade-->mevcuttaki degerdir(current expressin in column)
dogruIfade-->dogru, gelmesini istediginiz deger(new value/expression/text)

update tabloAdiniz
set kolonAdi=REPLACE(kolonAdi, 'degisecekIfade', 'dogruIfade')
where kriterleriniz(criterias);

6 Ağustos 2011 Cumartesi

UNION vs UNION ALL

Performanslı sorgu yazma endişesi taşıyanlar zaten neden bahsedeceğimi anlamışlardır. :) Çok artistik bir girizgah oldu. :D

Bu ikisi ne yapar, kısaca bahsedersek, iki sorgudan(veya daha çok) dönen sonuç kümelerini birleştirirler. Ancak çok önemli bir farkla..UNION, iki sorgudan dönen kayıtları birleştirirken, duplicate kayıt varsa, yani her iki sorgudan dönen aynı eleman varsa, bunlardan birini eler. Yani bir nevi SELECT DISTINCT yapar.
UNION ALL ise geleni gideni alır. :) Seçici değildir, tüm elemanları birleştirir, duplicate endişesi taşımaz.

Hemen basit bir örnekle açıklayalım. Management Studio'yu açmaya üşendiğimden, burada yazacağım, parse ettiğinizde ufak tefek hataları düzeltirsiniz artık. :)

ErkekIsımleri tablosunda şu elemanlar olsun=Ali, Veli, Deniz
KızIsımleri tablosunda da şu eelmanlar olsun=Ayşe, Fatma, Deniz

select * from ErkekIsımleri
union all
select * from KızIsımleri
--Dönen sonuç kümesi şöyle olacaktır=Ali, Veli, Deniz, Ayşe, Fatma, Deniz

select * from ErkekIsımleri
union
select * from KızIsımleri
--Dönen sonuç kümesi şöyle olacaktır=Ali, Veli, Deniz, Ayşe, Fatma
Gördüğünüz gibi, UNION yaptığımda, Deniz elemanı her iki tabloda da olduğundan, tek bir tanesini aldı. Ancak UNION ALL yaptığımızda, her ikisini de aldı.

Şimdi UNION ALL "kaka", gibi bir imaj uyandırmış olmayalım. :)  Aksine, eğer duplicate endişesi taşımıyorsanız, UNION ALL kullanın. Çünkü distinct işlemi, execution plan'da da göreceğiniz üzere ekstra maliyet getirecek ve sorgunun yükünü arttırarak, performansı düşürecektir. Eğer mümkünse UNION ALL tercih edilmeli. Kendimi nedense seyirciyi terse yatırmış yönetmen gibi hissettim bir an. :P :)

Saçmalamaya başlamadan bu kaydı da burada sonlandırmış olayım. :)