我尝试使用以下方法选择MySQL中仅包含特定字母数字字符的所有行:
SELECT * FROM table WHERE column LIKE '%abc%' OR column LIKE '%abd%'
OR column LIKE '%ab%'
例如:
abc1234没关系
abd1234没问题
abe1234不行
abg4567不行
ab1234没问题
ac1234不行
问题是,它选择所有" abe",#34; abg"。如何选择abc1234,abd1234和ab1234?
答案 0 :(得分:2)
有了这个
OR column LIKE '%ab%'
作为WHERE子句的一部分,选择abe和abg并不奇怪。
请允许我同时提及“查询类似于%'无法使用任何索引,并且在大型表上可能会非常慢。在一次查询中你有三个这样的事实只会让情况变得更糟。
答案 1 :(得分:2)
使用以下查询,该查询还将使用列列
上的索引<?php
if (! $r = $link->query("SELECT * FROM collections")) {
// handle error
}
echo '<div id="collectionsDiv">';
while ($row = $r->fetch_assoc()) {
echo <<<EOS
<div class="collection" id="{$row['id']}">
<div class="collection-hover">{$row['collection']}</div>
</div>
EOS
}
echo '</div>';
$r->free();
在这种情况下将使用索引的原因是查询未在字符串文字的开头使用通配符
答案 2 :(得分:0)
删除查询的最后一部分,告诉它选择abg和abe。 你告诉它选择所有以任何东西开头的项目,并以提供ab的任何东西结尾为中间。
答案 3 :(得分:0)
因为"abe"
会获得"abg"
或SELECT * FROM table WHERE column LIKE '%abc%' OR column LIKE '%abd%'
OR column LIKE '%ab0%' OR column LIKE '%ab1%' OR column LIKE '%ab2%' OR column LIKE '%ab3%' OR column LIKE '%ab4%' OR column LIKE '%ab5%' OR column LIKE '%ab6%' OR column LIKE '%ab7%' OR column LIKE '%ab8%' OR column LIKE '%ab9%'
如果您想要“ab”之后的数字,这是您的查询:
// Set to BorderPane#Center<br/>
boxCode = new VBox(0.0);
boxCode.setMinSize(400, 80);
// here I also set MaxSize using Double.MAX_VALUE and USE_COMPUTED_SIZE
paneCode = new ScrollPane(boxCode);
paneCode.setMinSize(400, 80);
paneCode.setStyle("-fx-background-color:transparent;");
paneCode.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);
layout.setCenter(paneCode);
答案 4 :(得分:0)
你打算选择列包含&#34; abc&#34;或&#34; abd&#34;或者&#34; ab&#34;但不是&#34; abe&#34;或&#34; abg&#34;。对于这种情况,我不认为你可以使用LIKE。尝试使用REGEXP。我想&#34; ab [^ g ^ e]?&#34;应该为你做好工作。
SELECT name FROM table WHERE column REGEXP&#39; ab [^ g ^ e]?&#39;;