我有下表:
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
答案 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
。我不确定你为什么目前有多部分价值。因此,如果您可以控制您的架构并且允许您进行更改/重新考虑它。