Veritabanında string olarak kaydedilmiş sayıların sıralanması esnasında istediğimiz sonuçları alamaz bunu decimal e çevirerek işlem yapmak isteriz. Fakat kırılım birden fazla ise yani aslında birden fazla ayırma işareti kullanıldıysa
Örnek olarak
Order by ile yapılan sorgu sonucu ilk kolondaki gibi gelen string alanlar aslında ikinci kolondaki gibi sıral bir şekilde getirilmek istenmiştir. Bu durumda çalıştırılacak order by ifadesi aşağıda ki gibidir.
ORDER BY
CASE WHEN TRY_CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 1))) IS NULL THEN 0 ELSE CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 1))) END ,
CASE WHEN TRY_CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 2))) IS NULL THEN 0 ELSE CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 2))) END,
CASE WHEN TRY_CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 3))) IS NULL THEN 0 ELSE CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 3))) END
CASE WHEN TRY_CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 1))) IS NULL THEN 0 ELSE CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 1))) END ,
CASE WHEN TRY_CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 2))) IS NULL THEN 0 ELSE CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 2))) END,
CASE WHEN TRY_CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 3))) IS NULL THEN 0 ELSE CONVERT( INT,REVERSE(PARSENAME(REVERSE([Kolon Adı]), 3))) END
Yorumlar
Yorum Gönder