0

我有一个MySQL 数据库,其中有一列包含零件编号。一些部件号包含空格

3864205010  J

当我查询数据库或搜索phpMyAdmin未返回任何结果的部分时。

然而,当我delete输入2 个空格然后再次键入它们时,搜索会返回一个结果。

此查询不返回结果:

SELECT * 
FROM  `parts` 
WHERE  `part_no` LIKE  '3864205010  K'

此查询返回结果:

SELECT * 
FROM  `parts` 
WHERE  `part_no` LIKE  '3864205010  K'

它们看起来相同,但在第二个查询中,我删除了“K”之前的 2 个空格并再次输入了这些空格。

4

4 回答 4

2

如果您可以使用通配符代替空格:

SELECT * 
FROM  `parts` 
WHERE  `part_no` LIKE  '3864205010%K'
于 2013-04-11T12:42:33.130 回答
0

是的,作为更新的问题,如果您希望删除更多的空间,内容之间可能是 3 或 4 个空格,下面的查询将对您使用完整

SELECT REPLACE( REPLACE( part_no, " ", " " ), " ", " " ) from parts.

让我知道它是否适合你?

于 2013-04-11T12:37:30.967 回答
0

这可能不是空格,而是 HTAB(ascii 代码 9)甚至是换行符/回车符(10 和 13)。在一个好的文本编辑器中复制粘贴,你会看到它的真正含义。

现在,关于您想知道为什么即使它看起来像一个空格它也不起作用,这是因为我们看到的每个字符都是由引擎解释的(记事本、phpmyadmin、firefox……任何带有文本渲染的软件)

实际发生的是,当引擎找到一个 ascii 代码时,它会将其转换为可见字符。例如,CHAR(9) 经常被转换成一个“大空间”,通常等于 2 或 4 个空格。但是 phpmyadmin 可能只是决定不那样做。

其他示例是换行符 (CHAR(10))。在文本编辑器中,这将是行结束的信号,并且(主要在 unix 系统下)必须开始新行。但是您可以将此换行符复制到数据库字段中,您只是不确定它将如何呈现。因为他们希望您看到单元格中的所有内容,他们可能会选择将其渲染为一个空格......但如果您查看它的 ascii 代码,那不是一个空格(这里没有技巧,所有渲染引擎都会告诉您正确的ASCII码)。

这对于始终使用其 ascii 代码处理字符很重要。


上面有一个答案建议使用通配符而不是空格。这可能匹配,也可能不匹配。假设您的字符串是 '386420K5010',所以它不是您要查找的字符串,但 LIKE '3864205010%K' 模式仍然会返回它。最好的可能是使用正则表达式或至少识别这些字符串的固定模式。

于 2013-04-11T13:11:30.093 回答
0
SELECT * 
FROM  `parts` 
WHERE  REPLACE(REPLACE(`part_no`, CHAR(9), ''),' ','') LIKE  REPLACE(REPLACE('3864205010  K', CHAR(9), ''),' ','')

如果part_no和/或搜索字符串有制表符和/或空格,这可能会起作用。

于 2013-04-11T12:45:31.160 回答