T-SQL’de ISNUMERIC() Kullanımı

Veri temizleme ve ETL süreçlerinde en sık ihtiyaç duyduğumuz işlemlerden biri, bir metin alanının sayısal bir değer içerip içermediğini kontrol etmektir. T-SQL içerisinde bu işi üstlenen en temel araç ISNUMERIC() fonksiyonudur.

ISNUMERIC, bir ifadenin geçerli bir sayısal veri türü olarak değerlendirilip değerlendirilemeyeceğini kontrol eder.

  • Dönen Değer 1: İfade sayısal bir türe (int, decimal, money, float vb.) dönüştürülebilir.
  • Dönen Değer 0: İfade sayısal değildir.

Genellikle IIF veya CASE WHEN blokları ile birlikte, kirli veriyi ayıklamak için kullanılır:

SELECT 
    KullaniciKodu,
    IIF(ISNUMERIC(KullaniciKodu) = 1, 'Sayısal', 'Metin Bazlı') AS VeriTipi
FROM Kullanicilar;

1. Yalancı Pozitifler (Unexpected Matches): ISNUMERIC sadece rakamları değil, finansal veya bilimsel gösterimleri de sayı kabul eder. Örneğin; virgül (,), artı (+), eksi (-) veya para birimi simgeleri ($) için de 1 sonucunu döndürür. Eğer sadece “tam sayı” kontrolü yapmak istiyorsanız bu bir risk oluşturabilir.

2. Cardinality Estimation ve Sorgu Performansı: Sorgularınızda WHERE bloğu içerisinde ISNUMERIC kullandığınızda, SQL Server’ın Cardinality Estimation (Kardinalite Tahmini) yeteneği üzerinde olumsuz etkiler yaratabilirsiniz.

Fonksiyon kullanımı, Optimizer’ın dönecek satır sayısını doğru tahmin etmesini engelleyebilir. Bu durum, özellikle milyonlarca satırlık tablolarda SQL Server’ın verimli bir “Index Seek” yerine maliyetli bir “Index Scan” yapmasına neden olur. Performans kritik sistemlerde bu tür mantıksal kontrollerin “Computed Column” (Hesaplanmış Kolon) üzerine taşınması ve bu kolonun indekslenmesi daha profesyonel bir yaklaşımdır.

Eğer amacınız verinin sadece sayı olup olmadığını anlamak değil, aynı zamanda o veriyi güvenle bir sayıya dönüştürmekse, SQL Server 2012 ve sonrasında gelen TRY_CAST veya TRY_CONVERT fonksiyonlarını kullanmak daha moderndir. Bu fonksiyonlar, dönüştürme başarısız olduğunda hata vermek yerine NULL döndürür.

ISNUMERIC hızlı çözümler sunsa da, arka plandaki tahminleme mekanizmalarını ve karakter toleransını bilerek kullanmak, bir DBA’in en önemli yetkinliklerinden biridir.

Başka makalede görüşmek dileğiyle..

Emanetlerinizi ve sözlerinizi tutun. Müminun-8

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir