Soci (Soczó Zsolt) szakmai blogja

2015.01.03.

SQL fejtörő

Filed under: Adatbázisok,SQL Server,Szakmai élet — Soczó Zsolt @ 17:50

Miért eredményez az alábbi query divide by zero hibát?

SELECT 144/(12/12/12);

Update: már jött két megoldás, de hétfő estig nem engedem megjelenni a kommenteket, hogy más is gondolkodhasson.

4 Comments

  1. Mivel a zárójeles részben egész számok szerepelnek, ezért az osztás eredménye is egész lesz, a tizedes érték nélkül, azaz 0.
    A select 144/(12.0/12/12) már jó eredményt ad.

    Comment by Atcom — 2015.01.03. @ 21:01

  2. 144/(12/12/12) -> 144/(1/12) -> 144/0 -> divide by zero

    alapbol int-kent kezeli ezeket. cast to decimal ha tenyleges tortet szeretnel

    Comment by palesz — 2015.01.04. @ 02:30

  3. “If an integer dividend is divided by an integer divisor, the result is an integer that has any fractional part of the result truncated.”

    Innen:
    http://msdn.microsoft.com/en-us/library/ms175009.aspx

    Tehát a select 1/3-mal, az is nulla, így pl
    select 144/(1/3) is DbZ. Viszont pl. ez jó:
    SELECT 144.0/(1.0/3.0);

    Bár itt jelzem, hogy ez sem egyenlő ezzel:
    SELECT 144/(1.0/3.0);

    :-)

    Comment by Meister — 2015.01.05. @ 14:12

  4. Köszi mindenkinek a választ, az egészekkel végzett osztások 0-at adnak a zárójelen belül, ezért lesz nullával osztás a kimenet.

    Gratulálok a sikeres válaszolóknak. :)

    Comment by Soczó Zsolt — 2015.01.05. @ 19:14

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress