2017-01-24 5 views
1

Ich habe die folgende Tabelle:Syntaxfehler in der WHERE-Klausel (CAST erforderlich?)

CREATE TABLE Book(article int, subArticle numeric); 

2. Feld - Paragraph enthält subarticles eines Artikels, so dass 1. Artikel 1.1 hat, 1.2, usw. subarticles

Tabelle hat Werte wie:

(1, 1.1), 
(2, 1.2); 

so dass 2. Reihe ist falsch - 2. Artikel nicht ‚1.2‘ Paragraph haben. Es hat '2.1', ... Unterartikel.

I die folgende Abfrage zu vergleichen, und nur die Zeilen zu lassen, in denen Artikel teilweise in ‚Paragraph‘ Feld (‚1‘ von ‚1,2‘) entsprechen realen Artikel Wert in entsprechendem Feld ‚Artikel‘:

SELECT * 
FROM Book 
WHERE LEFT(subArticle, CHARINDEX('.', subArticle) - 1) = article; 

Aber es Syntaxfehler in WHERE-Klausel fehlschlägt. Ohne WHERE-Klausel - es gibt keinen Fehler. Muss ich Werte umwandeln, um sie zu vergleichen? Ich habe es versucht, aber auch keinen Erfolg. Was wird dann die richtige Besetzung sein?

P.S. mit sqlite3

Antwort

-1

CharIndex ist für Strings ie. Zeichen (daher der Name). Sie können das nicht auf einer Zahl verwenden.

Da subArticle scheint, dass es ein Bezeichner sein sollte Ich denke, die beste Option ist, Ihr Schema neu zu strukturieren und nicht versuchen, diese Abfrage zu mangeln, bis es funktioniert.

Wirklich scheint es, dass dies nur ein rekursiver Schlüssel sein sollte, der auf sich selbst verweist, so dass sein Typ int sein sollte. Ich bin mir nicht sicher, warum Sie derzeit einen mehrteiligen Wert haben. Wenn Sie also die Kontrolle über Ihr Schema haben und es Ihnen erlaubt ist, es zu ändern/zu überdenken.

+0

Ich bin nicht sicher zu verwenden, was meinst du (ich SQL-Anfänger bin). Ich muss Sub-Artikel von Artikeln einrücken, so habe ich diese Struktur - Artikel 1: Sub-Artikel 1.1, etc. Und wenn ich es richtig habe, kann '1.1' nicht als int dargestellt werden, kann aber so numerisch sein – Shurov