用这个把我撞到墙上。
我有包含邮政编码和街道名称的表格,我还有另一张表格列出待售房屋(街道名称丢失的地方),我试着获取每个邮政编码的街道名称。
问题是表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
任何人都可以告诉我如何检查匹配忽略空格(如修剪但删除每个空格)
非常感谢您提供的任何帮助。
答案 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。