2009-04-06 18 views
22

Bütün numaraları (yani, 50, 75, 85, vs.)SQL Server neden iki tamsayı bölme sonuçlarını tamamlıyor?

I 100 ile bu sütunu bölmek

SELECT MY_COLUMN/100 AS PCT_AS_FRACTION 
FROM MY_TABLE 

olarak yüzde olarak ihtiva eden bir küçük tamsayı sütunu olan bir tablo Sonuç en yakın tam sayıya yuvarlanır. Örneğin, "50" sayısını içeren bir satır için sonuç olarak sıfırlarım.

Bunun basit bir ifadeye çoğaltabilirsiniz:

SELECT 50/100 AS TEST_VALUE 

Bunun nedeni nedir ve nasıl benim sonuçta daha hassas alabilirim?

cevap

32

sen (tamsayı bölü tamsayı) tamsayı bölme yaptığınızda her zaman bir tamsayı cevap almak. 50/100 = .50, tamsayı konuşulanında 0'dır.

Eğer 100,0 tarafından MY_COLUMN bölünmesi denediniz mi?

+2

100.0 eserleri ile bölerek.Basit bir problem için basit bir açıklama. Teşekkürler :) – JosephStyons

+0

Tesadüfen, 0.01 ile çarpmak aynı etkiye sahiptir ve belki de daha açıktır. – JosephStyons

+0

Belirli 'tamsayı' terimi, * kesiktir *. '75/100' hala' 0' döndürür. Tanım, sadece herhangi bir kesirli parçayı sayıdan çıkarmaktır. – Rabid

1

Sen tamsayı bölme yapıyoruz. 50/100 işaretle bölme kayan kullanmak gerekir 50.

bir geri kalan kısmı ile 0'dır.

24

Cast tam sayılar.

SELECT (cast(50 AS float)/100) 
0

Başka bir tamsayıya neden olan 2 tamsayı bölüyorsunuz.

Gelmeli de

SEÇ bu şekilde döküm mümkün (50/100) :: sayısal;

+0

MS SQL Server ile çalışmıyor gibi görünüyor. – svick

1

Not - tam bölümünün kalanı yuvarlak değildir olmasıyla dikkat edin. Aksine, düştü. Bu, FLOOR sql işlevini çağırmakla eşdeğerdir.

Bu yaygındır ve iki tamsayı çarparak zaman, bir kısmını hiçbir zaman ortaya çıkar, çünkü bu tür olarak tanımlanır. Bu nedenle bir fraksiyon işleme metodolojisi tamsayılar çarparak zaman farz asla ama aynı tamsayı bölümü için söylenemez. SQL dateTime aritmetik yaparken

Bu genellikle bir etkisi olabilir.

1

bunu

yüksek önceliğe sahip argümanının veri türü döndürür /(Divide) operatörü kullanıyorsunuz.

ve

bir tamsayıdır kar bir tamsayı bölen bölünür, sonuç kesik sonucu herhangi bir kesirli bölümü olan bir tam sayı olup. decimal and numeric veya float or real:

Yani, en azından uygun türe işlenen birini döküm gerekir.