WHERE子句中的语法错误(需要CAST吗?)

时间:2017-01-24 21:02:29

标签: sql sqlite where-clause

我有下表:

CREATE TABLE Book(article int, subArticle numeric);

第二个字段 - 子文章包含文章的子文章,因此第一篇文章有​​1.1,1.2等子文章

表的值如下:

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

所以第二行不正确 - 第二篇文章不能有'1.2'子文章。它有'2.1',......子粒子。

我运行以下查询进行比较并仅保留那些行,其中'subarticle'字段中的文章部分('1'来自'1.2')对应于相应字段'article'中的真实文章值:

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

但它在WHERE子句中失败了语法错误。没有WHERE子句 - 没有错误。 我需要投射值来比较它们吗?我试过了,但也没有成功。那么什么是正确的演员?

P.S。使用sqlite3

2 个答案:

答案 0 :(得分:2)

您正在尝试将SQL Server语法与SQLite一起使用 https://www.sqlite.org/lang_corefunc.html

select  *
from    Book
where   substr(subArticle,1,instr(subArticle,'.')-1) = article

答案 1 :(得分:-1)

CharIndex用于字符串即。字符(因此名称)。你不能在数字上使用它。

由于subArticle似乎它应该是一个标识符,我认为最好的选择是重构您的架构,而不是试图破坏这个查询,直到它工作。

实际上这似乎只是一个指向自身的递归键,所以它的类型应该是int。我不确定你为什么目前有多部分价值。因此,如果您可以控制您的架构并且允许您进行更改/重新考虑它。