You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询数据库表中匹配含带/无句点缩写的目标城市名?

嘿,这个场景太常见了!我之前处理地址类数据的时候也踩过类似的坑,给你分享几个实用的解决办法:

方法1:字符串替换消除句点差异

最简单直接的方式就是把数据库里城市名称中的句点去掉,再和你手里的不带句点的字符串做精确匹配。不同数据库的替换函数略有不同,给你举几个常用的例子:

MySQL / MariaDB

SELECT * 
FROM your_table
WHERE REPLACE(city_column, '.', '') = 'Ft Worth';

PostgreSQL

SELECT * 
FROM your_table
WHERE REPLACE(city_column, '.', '') = 'Ft Worth';
-- 或者用正则替换也可以:REGEXP_REPLACE(city_column, '\.', '', 'g')

SQL Server

SELECT * 
FROM your_table
WHERE REPLACE(city_column, '.', '') = 'Ft Worth';

这个逻辑很直白:把表中城市列的所有句点都清空,再和Ft Worth对比,不管原数据是Ft. Worth还是Ft Worth都会被匹配到。如果担心大小写问题(比如ft worth、Ft. WORTH),可以统一转成小写或大写:

SELECT * 
FROM your_table
WHERE LOWER(REPLACE(city_column, '.', '')) = LOWER('Ft Worth');
方法2:正则表达式匹配(适合复杂缩写场景)

如果你的数据里还有其他类似的缩写(比如St. Louis/St Louis、Dr. Phillips/Dr Phillips),用正则表达式可以更灵活地匹配带或不带句点的情况:

MySQL / MariaDB

SELECT *
FROM your_table
WHERE city_column REGEXP '^Ft\.? Worth$';

这里的\.?表示句点是可选的,^和$确保整个字符串完全匹配,避免误匹配到Ft. Worthy这类无关城市。

PostgreSQL

SELECT *
FROM your_table
WHERE city_column ~ '^Ft\.? Worth$';
方法3:提前标准化数据(一劳永逸)

如果这类不规范的数据经常给你添堵,不如一次性把数据统一格式,以后查询就省心多了:

-- 先备份表!先备份表!先备份表!重要的事说三遍
UPDATE your_table
SET city_column = REPLACE(city_column, '.', '');

执行完这个更新后,所有城市名称里的句点都会被移除,之后直接用精确匹配查询就行,效率也比每次查询都做替换高很多。

内容的提问来源于stack exchange,提问作者santa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:57:56