2011-09-13 22 views
11

Geçtiğimiz günlerde SQL Server'da ISNUMERIC ile çalışıyordum, bir sorunla karşılaştığımda bu kod parçasını bulmaya başladım.ISNUMERIC ('.') Neden 1?

SELECT ISNUMERIC('.') 

Bu, 1 döndürür, true olarak, bu dönüş 0 yanlış olarak değil mi?

+0

hayır. 1.1 sayısal. ISNUMERIC()) çok basit, hatta aptalca bile diyebiliriz ... bu nedenle sayısal bir dönem düşünür. Bu konu için –

+2

',' de (birçok yerel ondalık ayırıcı olarak kullanır) – Unsliced

cevap

16

Bkz. IsNumeric() Broken? Only up to a point.

SELECT CAST('.' AS MONEY) 

döner 0.00 (döküm int ve float başarısız olsa da)

ISNUMERIC sadece değeri genellikle yararsız sayısal veri türleri herhangi birine dökülebilir kontrol eder. Genellikle belirli bir türe dönüştürülebilir olup olmadığını bilmek istersiniz.

Additionally it doesn't even seem to do that task correctly for all possible inputs.. ISNUMERIC(' '), hem int hem de para basarısına rağmen 0 değerini döndürür. Tersine ISNUMERIC(N'8'), 1 döndürür, ancak denediğim herhangi bir öğeye başarılı bir şekilde yayınlanmaz.

Bunun için bazı yararlı yardımcı işlevleri buradadır IsNumeric, IsInt, IsNumber. SQL Server 2012, bu büyük ölçüde yardımcı olan TRY_PARSE ve TRY_CONVERT ürününü tanıttı.

+3

tam olarak çalışır. Kaygan eğimi düşünün: '10' tamam, '10.0' tamam, '10. 'tamam ... (slayttan yürütme) böylece' .1' tamam olmalı ... ve '.0' ve .. evet, tamam. [Ayrışmayı girmek için cömert olmak] (https://plus.google.com/114034641416688387662/posts/8bJZnLFxAfi) bazen olumsuzluklara sahiptir. – sehe

+0

Bunun için teşekkürler, Denali rulo! –

1

Çünkü "." ondalık sayılarda kullanılır!

için here

vererek isNumeric öğesinin gör '-' & '' Neden null ('-') & isnumeric ('.') 1 döndürüyor?

Yanıt: "-" negatif ve "." Anlamına gelir. ondalık numarasında kullanılır. Buna rağmen neden ISNUMERIC adını verdikleri hakkında hiçbir fikrim yok. numaralı telefonun adı, ISNUMBERRELATED olmalıdır.

İlgili konular