我有一个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个空格,并再次输入了空格。
答案 0 :(得分:2)
如果您可以使用通配符而不是空格:
SELECT *
FROM `parts`
WHERE `part_no` LIKE '3864205010%K'
答案 1 :(得分:0)
是更新的问题,如果您希望删除更多空间,其中内容可能是3或4个空格,查询将使用全部
SELECT REPLACE( REPLACE( part_no, " ", " " ), " ", " " ) from parts.
让我知道它是否适合您?
答案 2 :(得分:0)
SELECT *
FROM `parts`
WHERE REPLACE(REPLACE(`part_no`, CHAR(9), ''),' ','') LIKE REPLACE(REPLACE('3864205010 K', CHAR(9), ''),' ','')
如果part_no
和/或搜索字符串包含制表符和/或空格,则可能会有效。
答案 3 :(得分:0)
这可能不是空格而是HTAB(ascii代码9)或甚至换行/回车(10和13)。在一个好的文本编辑器中复制粘贴,你会看到它到底是什么。
现在,关于你为什么它不起作用的奇迹,即使看起来像一个空格,这是因为我们看到的每一个字符都被解释为引擎(记事本,phpmyadmin,firefox ......任何带文本呈现的软件)
实际发生的是,当引擎找到ascii代码时,它会将其转换为可见字符。例如,CHAR(9)经常被转换成通常等于2或4个空格的“大空间”。但phpmyadmin可能只是决定不这样做。
其他示例是换行(CHAR(10))。在文本编辑器中,它将是该行结束的信号,并且(在大多数unix系统下)必须启动新行。但是您可以将此换行符复制到数据库字段中,您只是不确定它将如何呈现。 因为他们希望你看到单元格中的所有内容,他们可能会选择将其渲染为空格......但是如果你看一下它的ascii代码那就不是空格了(这里没有技巧,所有渲染引擎都会告诉你对ascii代码)。
始终使用ascii代码处理字符非常重要。
上面的答案建议使用通配符而不是空格。这可能匹配,或者可能不匹配。假设你的字符串是'386420K5010',所以它不是你想要的那个,仍然是LIKE'3864205010%K'模式会返回它。最好的可能是使用正则表达式或至少识别这些字符串的固定模式。