2013-07-26 14 views
11

Próbuję uruchomić zapytanie: Dlaczego SQLite mówi, że instr nie istnieje?

 
SELECT name 
FROM Foo 
WHERE instr(name, '@') = 0 AND instr(name, '.') != 0 

Ale pojawia się błąd: "brak takiej funkcji: instr". To mnie myli, ponieważ ta funkcja istnieje. Czy ktoś wie, co się dzieje?

P.S. Próbowałem również kwerendy w SQLiteSpy, który daje ten sam błąd.

+2

ten [dodano 3.7.15]() (http://www.sqlite.org/changes.html wydany w grudniu) - Jaką wersję uruchamiasz? –

+0

@MikeChristensen ah ha! Używam wersji 3.7.14.1. Dzięki! – chacham15

+0

Ooo tak blisko! :) –

Odpowiedz

17

Według Change History funkcja instr został dodany w wersji 3.7.15:

2012-12-12 (3.7.15)

Added the instr() SQL function.

Upewnij się, że korzystasz z najnowszej wersji.

przypadku modernizacji, nie jest rozwiązaniem, można również użyć operatora LIKE:

SELECT name 
FROM Foo 
WHERE name NOT LIKE '%@%' -- name does NOT contain @ 
AND name LIKE '%.%';  -- name DOES contain . 
+3

instr (x, y) zwraca pozycję wx ciągu znaków y. LIKE zwraca wartość true lub false. Nie jest nawet zdalnie równoważny dla wszystkich zastosowań. – fyngyrz

+1

Nie miałem zamiaru sugerować, że są one równoważne, tylko że jest to praca dla przypadku użycia opisanego w oryginalnym poście. –

Powiązane problemy