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

时间:2015-10-07 17:19:10

标签: sql oracle substring oracle-sqldeveloper

这是我的Weapons表:

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。但是,这段代码给我一个语法错误。

2 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:1)

当您使用Oracle时,该功能为SUBSTR,而非WHERE,对于任何RDBMS,您都需要使用HAVING,而不是{{ 1}}:

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

SUBSTRING在Microsoft SQL Server中运行良好。

此外,LEFT函数得到了广泛支持,如果在Name上定义了索引,则可能更有可能使用索引。这适用于Oracle,SQL Server和其他人:

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

然而,最好的选择可能是使用LIKE,它得到了广泛的支持和灵活,并且如果存在的话,也可能会在Name列上使用索引,只要修复后的文本为&#39 ;重新搜索是在开头:

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

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