Mam wiersze poniżej w klauzuli WHERE mojego zapytania, ale wciąż otrzymuję ten błąd:SQL charindex throwing Niepoprawny parametr długości przekazany do funkcji LEFT lub SUBSTRING z powodu okresu?
Msg 537, Level 16, State 3, Line 3
Invalid length parameter passed to the LEFT or SUBSTRING function.
SUBSTRING(
[email],
1,
CHARINDEX('@',[email])-1
) =
SUBSTRING(
[email],
CHARINDEX('@',[email])+1,
CHARINDEX('.', [email])
)
Błąd jest pochodzący z CHARINDEX('.', [email])
Jeśli zmienić ten okres do listu, Nie widzę błędu. Każdy zapis zawiera okres, a nawet jeśli nie, funkcja charindex zwróci 0, co nie spowoduje błędu. Muszę przegapić coś prostego. Proszę pomóż!
EDYCJA.
Próbowałem rzucić go wewnątrz isnull, isnull(CHARINDEX('.', [email]), 1)
na wypadek, gdyby z jakiegoś powodu zwracał wartość zerową, ale to też nie działało.
+1 Jest to jedyna rzecz, która od czasu ... ale PO powiedział " Jeśli zmienię ten okres na list, nie otrzymam błędu. " –
Rozumiem, ale to nie może być prawda. Drugi parametr może być liczbą ujemną (chociaż przyznaję, że to dziwne). Trzeci parametr musi być "dodatnią liczbą całkowitą". Obejmuje to 0. Jedynym możliwym sposobem uzyskania nieprawidłowego parametru długości jest uzyskanie ujemnego parametru 3 (mniej niż 0).Charindex nie może zwrócić liczby ujemnej, więc problem nie może dotyczyć funkcji drugiego podłańcucha i MUSI być trzecim parametrem pierwszej funkcji podłańcuchowej. –
Dzięki! Stół, na którym go uruchomiłem, jest bardzo duży, więc gdy uruchomiłem zapytanie z literą w miejscu okresu, wyniki zaczęły się zapełniać przez kilka minut, zanim trafiły w jedno bez symbolu @ i spowodowały błąd (przepraszam, nie złapanie tego było spowodowane moją niecierpliwością). Dzięki za pomoc! –