webForumDet fria alternativet

Divide by zero error encountered

6 svar · 433 visningar · startad av aleborg

aleborgMedlem sedan jan. 20013 341 inlägg
#1

Jag har plötsligt börjat få ett mystiskt felmeddelande på en SQL-sats som har fungerat länge:

			SELECT 
				ID,
				ProductID,
				AccountNamesID,
				UserID,
				ServerID,
				Article,
				[Name],
				Description,
				Period,
				Qty,
				Price,
				Created,
				Ended 
			FROM 
				ServiceItems
			WHERE 
				(Period > 0) 
			AND 
				(UserID = @userid) 
			AND 
				(DATEDIFF(mm, Created, @month) % Period = 0) 
			AND 
				(Ended IS NULL OR Ended > GETDATE())

Jag har lyckats utesluta felet till följande del:
DATEDIFF(mm, Created, @month) % Period = 0

@month är '2007-08-01', Created är '2005-08-11' och Period är 12 i raden(som jag trots allt får fram men felmeddelandet uppstår ändå!?), jag vet att nästa rad som skulle ha tagits fram har Period=0, men den filtrerar jag bort i SQL-frågan.

Vad är fel?

aleborgMedlem sedan jan. 20013 341 inlägg
#2

Efter lite tester verkar det som om (DATEDIFF(mm, Created, @month) % Period = 0) kollas före (Period > 0), har testat med att sätta paranteser på olika sätt men utan resultat :(

AddeladdeMedlem sedan jan. 20013 406 inlägg
#3

Testa:

SELECT 
				ID,
				ProductID,
				AccountNamesID,
				UserID,
				ServerID,
				Article,
				[Name],
				Description,
				Period,
				Qty,
				Price,
				Created,
				Ended 
			FROM 
				ServiceItems
			WHERE 
				(DATEDIFF(mm, Created, @month) % Period = 0) 
			AND 
				ID in(SELECT AI.ID FROM ServiceItems AS AI WHERE AI.Period > 0 AND (AI.UserID = @userid) 
AND AI.Ended IS NULL OR AI.Ended > GETDATE())
aleborgMedlem sedan jan. 20013 341 inlägg
#4

Fungerade inte heller tyvärr.

LarsGMedlem sedan dec. 200012 464 inlägg
#5
AND DATEDIFF(mm, Created, @month) % case when Period = 0 then 1 else period end = 0
aleborgMedlem sedan jan. 20013 341 inlägg
#6

Tack LarsG, nu funkar det. Hur kommer det sig att DATEDIFF kollas före Period>0, borde den inte gå i rätt ordning?

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Det kan man aldrig veta. Det är inte definierat i vilken ordning olika villkor testas.

127 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)