Ho la seguente query:L'espressione CASE valuta tutti i casi prima dell'elaborazione?
SELECT
CASE
WHEN 'Sara' like '% %' THEN SUBSTRING('Sara', 1, CHARINDEX(' ', 'Sara') - 1)
ELSE 'Sara'
END AS FirstName,
CASE
WHEN 'Sara' like '% %' THEN SUBSTRING('Sara', CHARINDEX(' ', 'Sara') + 1, 8000)
ELSE ''
END AS LastName
piuttosto straight-forward - sto testando una query di nome scissione. Così provo lo scenario in cui il nome non ha spazi e ottengo la seguente eccezione:
Parametro di lunghezza non valido passato alla funzione
SUBSTRING
.
Perché è quello? Dovrebbe non valutare la prima clausola e andare immediatamente allo ELSE
? Come faccio a girare questo ..?
1) Espressione caso, non caso. 2) Probabilmente la risposta è NO. Almeno non logicamente. (L'implementazione è specifica del prodotto.) – jarlh
Ti rendi conto che stai confrontando la stringa letterale ''Sara'' e non un campo, giusto? – Siyual
Quindi perché genera un'eccezione con la sottostringa? Sono un po 'confuso .. – user2124871