SQL Server’da ISNUMERIC Fonksiyonu Yerine TRY_PARSE Fonksiyonu Kullanmak
Herkese merhaba,
Bu yazıda SQL Server’da ISNUMERIC fonksiyonu yerine TRY_PARSE fonksiyonu kullanmak ile ilgili bilgi vermeye çalışacağım.
SQL Server’da özelleştirilmiş fonksiyonları kullanmayanımız yoktur. Bu fonksiyonlar çoğu zaman hayat kolaylaştırır ancak bir o kadar da işinize yaramayabilir.
Bu yazıda oluşturulmuş olan özelleştirilmiş fonksiyonlarda dikkat edilmesi gereken noktalardan bahsedeceğim.
ISNUMERIC fonksiyonu verilen değerin sayısal bir ifade olup olmadığını kontrol etmek için kullanılır. Kullanımı : ISNUMERIC (ifade) şeklindedir. eğer ifade sayısal ise sorgu sonucu 1 döner diğer durumda 0 döner.
Aşağıdaki sorguyu inceleyelim.
SELECT
ISNUMERIC('123') as '123'
,ISNUMERIC('abc') as 'abc'
,ISNUMERIC('-') as '-'
,ISNUMERIC('+') as '+'
,ISNUMERIC('$') as '$'
,ISNUMERIC('.') as '.'
,ISNUMERIC(',') as ','
,ISNUMERIC('\') as '\'
Yukarıdaki sorguyu çalıştırdığınızda aşağıdakine benzer bir sonuç göreceksiniz.
Yukarıdaki sonuca dikkat edersek ISNUMERIC fonksiyonu bazı karakterleri de sayısal olarak ele alır. Örneğin: – (eksi), + (artı), $ (dolar), \ (ters eğik çizgi).
Yukarıda “abc” değeri için “0” ve geri kalan sütun değerleri için “1” değerini döndürür. Aslında bu bir hatadır. Bu nedenle, ISNUMERIC fonksiyonunu kullanırken çok dikkatli olmamız ve T-SQL mantığınındaki olası tüm durumları göz önünde bulundurmamız gerekecektir.
Aynı işlemi TRY_PARSE fonksiyonunu kullanarak yapalım.
SELECT
TRY_PARSE('123' as int) as '123'
,TRY_PARSE('abc' as int) as 'abc'
,TRY_PARSE('-' as int) as '-'
,TRY_PARSE('+' as int) as '+'
,TRY_PARSE('$' as int) as '$'
,TRY_PARSE('.' as int) as '.'
,TRY_PARSE(',' as int) as ','
,TRY_PARSE('\' as int) as '\'
Yukarıdaki sorguyu çalıştırdığınızda aşağıdakine benzer bir sonuç göreceksiniz.
Yukarıdaki sorgu, ilk sütun değerini sayısal olarak gösterir ve kalan değerler için NULL değerini döndürür.
Ayrıca TRY_PARSE fonksiyonu, doğrulama için diğer NUMERIC & DATETIME veri türleri ile birlikte de kullanılabilir.
SELECT
TRY_PARSE('123' as int) as '123'
,TRY_PARSE('123.0' as float) as '123.0'
,TRY_PARSE('123.1' as decimal(4,1)) as '123.1'
,TRY_PARSE('$123.55' as money) as '$123.55'
,TRY_PARSE('2023/09/20' as datetime) as '2023/09/20'
Yukarıdaki sorguyu çalıştırdığınızda aşağıdakine benzer bir sonuç göreceksiniz.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.