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

SQL字符串处理:如何清洗并筛选正确的州名格式取值

州名拼写变体去重SQL实现方案

以下是针对你需求的可落地SQL实现,核心基于你提出的「同组内选取最大长度字符串」的逻辑:

核心实现逻辑

  • 以去掉所有空格后的州名作为分组依据,将同源的不同拼写变体(如New Jersey、NewJersey)归为同一组
  • 同一组内按州名字符串长度倒序排序,带空格的正确拼写长度更长,会排在同组首位
  • 每组仅取排序第一的记录,即可得到全量正确拼写的州名条目

基础实现代码

假设你的源表名为state_source,包含字段id、state_name,代码如下:

WITH ranked_states AS (
    SELECT 
        id,
        state_name,
        ROW_NUMBER() OVER (
            -- 按去空格后的州名分组,归并同源变体
            PARTITION BY REPLACE(state_name, ' ', '') 
            -- 同组内按长度倒序,长度相同则按字典序正序,确保标准拼写优先
            ORDER BY LENGTH(state_name) DESC, state_name ASC
        ) AS group_rn
    FROM state_source
)
SELECT id, state_name
FROM ranked_states
WHERE group_rn = 1;

以上代码中REPLACE(state_name, ' ', '')会把所有变体的州名统一为无空格形式作为分组键,确保同源变体不会被拆分;LENGTH(state_name) DESC保证带空格的标准拼写排在同组第一位,如果你有自定义的优先级规则,可以调整ORDER BY部分的排序逻辑。

可选优化方案

  • 如果你有现成的官方标准州名对照表,建议优先用关联匹配的方式替换按长度判断的逻辑,准确率更高,示例如下:
SELECT s.id, t.standard_state_name
FROM state_source s
INNER JOIN standard_state_table t 
    ON REPLACE(LOWER(s.state_name), ' ', '') = REPLACE(LOWER(t.standard_state_name), ' ', '')
  • 针对更复杂的拼写变体(如字母拼写错误、缩写),可以结合数据库内置的LEVENSHTEIN编辑距离函数做模糊匹配,进一步提升匹配准确率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:06:04