mysql选择忽略内部空间的查询

时间:2016-03-22 09:07:41

标签: mysql

用这个把我撞到墙上。

我有包含邮政编码和街道名称的表格,我还有另一张表格列出待售房屋(街道名称丢失的地方),我试着获取每个邮政编码的街道名称。

问题是表1存储没有空格的邮政编码,而我正在尝试更新的表2存储了带空格的邮政编码。

因此在表1中,邮政编码存储为“l249pb”,表2存储为“l24 9pb”。

现在,如果邮政编码以完全相同的格式存储,即没有空格,我希望此查询能够正常工作:

listDataChild.put(listDataHeader.get(1), gejala);

我试过这个,但它不会工作:

UPDATE Table1
INNER JOIN Table2 ON ( Table1.PostCode = Table2.PostCode )
SET Table1.StreetName = Table2.StreetName

任何人都可以告诉我如何检查匹配忽略空格(如修剪但删除每个空格)

非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

根据您提供的数据UPDATE运行就好了。可能你看到的空白实际上并不是空格,而是something else,例如不间断的空格,标签等。

在正常SPACE之后,下一个最常见的空格(不是换行符)是CHARACTER TABULATION(即水平制表符)和NO-BREAK SPACE。您可以分别使用CHAR(9)CHAR(160)在查询中引用它们。

您的表查看器应用程序也可能会将换行符显示为简洁空间,因此如果替换空格,选项卡还不够,请尝试替换它们。

如果确实需要替换所有空白字符...不幸的是,MySQL中没有“空白通配符”。从技术上讲,你可以制作一个怪物REPLACE(REPLACE(REPLACE(REPLACE… - 调用,最后用''替换所有空格字符。例如,要替换每个THREE-PER-EM SPACE,首先查找其Unicode代码点(U+2004),然后您可以替换它的出现,例如搭配:
 REPLACE(PostCode, CHAR(0x2004 using ucs2), '')

有一个黑客的快捷方式:如果您确定您的数据应该只包含Latin-1字符且不包含?(问号),那么您可以先将CONVERT()字符串作为latin1,将代码为溢出的所有字符替换为?,然后将所有?替换为''
REPLACE(CONVERT(PostCode using latin1), '?', '')
这在一次性手动查询中非常有用,但是为了继续使用,可以更好地明确替换字符。

但首先你应该检查你的数据输入消毒剂/验证器,这样以后的记录就不会那么乱了。在尝试进行连接查询之前,如果可能,您可以考虑运行批量替换以规范PostCode列上的数据。仅包含旧版数据的旧系统get worse over time