Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

January 3, 2015 / by Zsolt Soczó

SQL fejtörő

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.

Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

LEAVE A COMMENT

4 COMMENTS

  • Atcom January 3, 2015

    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.

  • palesz January 4, 2015

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

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

  • Meister January 5, 2015

    “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);

    :-)

  • Soczó Zsolt January 5, 2015

    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. :)