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

Syntax error in WHERE clause (CAST required?)

我有以下 table:

CREATE TABLE Book(article int, subArticle numeric);

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

Table 的值如下:

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

因此第 2 行不正确 - 第 2 篇文章不能有“1.2”子文章。它有 '2.1',... 子文章。

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

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

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

P.S。使用 sqlite3

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

由于 subArticle 似乎它应该是一个标识符,我认为最好的选择是重构您的模式,并且在它工作之前不要尝试破坏此查询。

真的,这似乎应该只是一个指向自身的递归键,所以它的类型应该是 int。我不确定为什么你现在有一个 multi-part 值。因此,如果您可以控制您的架构并且您被允许,那么更改它/重新考虑它。

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

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