无法匹配 SQL table 中的单个字符

Having trouble matching a single character in an SQL table

我需要使用'_'通配符来查找所有只有一个字母的id,其中有几个。但是,当我 运行 我的查询时,没有行被 returned.

这是我的查询:

SELECT *
FROM table
WHERE id LIKE '_';

我有一个 table 可以调用 Table1,它有两列,id 和 name。 id 有 1 个或 2 个字符来标记名称。我试图只找到 ID 只有一个字符的名称。这是 table 的示例:

id     name
A      Alfred
AD     Andy
B      Bob
BC     Bridget

本例中我只想return Alfred 和 Bob。

我不想要解决方案,但任何建议或想法都会有所帮助。

这是我的查询截图: http://i.imgur.com/EWTfoVI.png?1

这是我的 table 的一个小例子: http://i.imgur.com/urGRZeK.png?1

因此,在我的 table 这个例子中,理想情况下我希望只有东亚... returned。

如果我专门搜索它有效的字符,但出于某种奇怪的原因,“_”通配符不起作用。

例如:

SELECT *
FROM icao
WHERE prefix_code ='Z';

这有效。

尝试使用 TRIM

Select *
FROM [Table]
where TRIM(ID) LIKE '_';
SELECT *
FROM table
WHERE LENGTH(id)=1 

在MySQL中,下划线用于表示单个字符的通配符。您可以在此处阅读有关 Pattern Matching 的更多信息。

按照您的编写方式,您的查询将提取 id 列只有一个字符的任何行,您无需更改任何内容。

这是一个 SQL Fiddle 示例。

编辑

一个故障排除技巧是确保没有白色space before/after 前缀代码。如果有,你需要删除它,添加 TRIM():

SELECT *
FROM myTable
WHERE TRIM(id) LIKE '_';

这里有一个 TRIM 的例子。

编辑 2

希望能对您的怪异行为进行一些解释。在 MySQL 中,如果一个字符上有尾随白色 space,如果你说 id = 'Z'; 它仍然会匹配 this fiddle 现在看到的。但是,前导白色 space 不会与此匹配,但仍会被 TRIM() 更正,因为这会删除 varchar 前后端的白色 space。

TL;DR 您在 Z 之后有尾随白色 space,这是导致问题的原因。

奇怪...,在我的情况下完美运行(我使用的是 mysql 5.5)。 请试试这个:

select * from mysql.help_topic where name like '_';

你得到了什么套装?

对您观察到的行为最可能的解释是值中的尾随空格(或其他空格)。也就是你看到一个字符

'A'

但该值实际上可能存储为两个(或更多)字符。

'A ' 

要查看实际存储的内容,您可以使用 HEXLENGTH 函数。

SELECT t.foo
     , LENGTH(t.foo)
     , HEX(t.foo)
  FROM mytable t
 WHERE t.foo LIKE 'A%'

%LIKE 运算符的通配符,可匹配任意数量的字符(零个、一个或多个)。

您可以使用 RTRIM() 函数删除尾随空格...

SELECT RTRIM(t.foo)
     , LENGTH(RTRIM(t.foo))
     , HEX(RTRIM(t.foo))
  FROM mytable t
 WHERE t.foo LIKE 'A%'