gpt4 book ai didi

mysql select查询忽略内部空间

转载 作者:可可西里 更新时间:2023-11-01 07:43:56 24 4
gpt4 key购买 nike

用这个把我的头撞在墙上。

我有一个包含邮政编码和街道名称的表格,还有另一个表格,其中列出了待售房屋(其中缺少街道名称),我正在尝试获取每个邮政编码的街道名称。

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

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

现在,如果邮政编码都以完全相同的格式存储,即没有空格,我希望此查询有效:

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

我试过了,但是不行:

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

谁能告诉我如何检查忽略空格的匹配项(就像修剪但删除每个空格)

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

最佳答案

根据您提供的数据,UPDATE 运行得很好。您看到的空格可能实际上不是空格,而是 something else ,例如不间断空格、制表符等

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

您的表格查看器应用程序也可能将换行符显示为简洁的空格,因此如果替换空格、制表符和 nbsp 不够,请尝试替换它们。

如果您真的需要替换所有空白字符……不幸的是,MySQL 中没有“空白通配符”。从技术上讲,您可以进行一个怪异的 REPLACE(REPLACE(REPLACE(REPLACE... 调用,最终会将所有空白字符替换为 ''。例如,要替换每个 THREE-PER-EM SPACE,首先查找它的 Unicode 代码点 (U+2004),然后您可以替换它的出现,例如:
REPLACE(PostCode, CHAR(0x2004 使用 ucs2), '')

有一个 hackish 捷径:如果您确定您的数据应该只包含 Latin-1 字符并且没​​有 ?(问号),您可以 CONVERT() 将字符串先替换为latin1,将所有溢出code的字符替换为?,然后将所有?替换为'':
REPLACE(CONVERT(PostCode using latin1), '?', '')
这在一次性手动查询中很有用,但要继续使用,最好显式替换字符。


但首先您应该检查您的数据输入 sanitizer /验证器,这样以后的记录就不会那么乱。也许您可以考虑运行批量替换以规范化 PostCode 列上的数据,如果可能的话,甚至在尝试执行连接查询之前。仅具有遗留数据的遗留系统 get worse over time .

关于mysql select查询忽略内部空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36150144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com