如何检查 SQL 中的查询中的子字符串?

How do I check the substring in a query in SQL?

这是我的 Weapons table:

Name / DPS / Style

Noxious Bow / 1000 / Range
Chaotic Staff / 800 / Magic
Armadyl Crossbow / 750 / Range
Saradomin Godsword / 600 / Melee
Dragon Battlestaff / 600 / Magic
Dragon Longsword / 550 / Melee
Elder Shortbow / 500 / Range
Darklight / 400 / Melee

这是我尝试过的:

SELECT Name, DPS, Style
FROM Weapons
HAVING SUBSTRING(Name, 1, 1)='D';

我希望显示所有以字母 D 开头的 Weapons。但是,这段代码给我一个语法错误。

当您使用 Oracle 时,函数是 SUBSTR,而不是 SUBSTRING,对于任何 RDBMS,您需要使用 WHERE,而不是 HAVING ]:

SELECT Name, DPS, Style
FROM Weapons
WHERE SUBSTR(Name, 1, 1)='D';

SUBSTRING 在 Microsoft SQL Server 中可以正常工作。

此外,LEFT 函数得到了相当广泛的支持,如果在 Name 上定义了一个索引,则可能更有可能使用索引。这将适用于 Oracle、SQL 服务器和其他:

SELECT Name, DPS, Style
FROM Weapons
WHERE LEFT(Name, 1)='D';

然而,最好的选择可能是使用 LIKE,它得到广泛支持且灵活,并且也可能会在 Name 列上使用索引(如果存在的话),只要固定文本'正在搜索开头:

SELECT Name, DPS, Style
FROM Weapons
WHERE Name LIKE 'D%';

您可能可以在这个阶段完成基本的 SQL 教程,并记住虽然 "SQL" 有一个标准核心,但每个版本都不同,您需要如果您使用的是 Oracle,请寻找特定于 Oracle 的建议。

试试这个:

SELECT Name, DPS, Style
FROM Weapons
WHERE Name LIKE 'D%';