【问题标题】:SQL to remove duplicated records by ignoring non-letters and non-digits [closed]SQL通过忽略非字母和非数字来删除重复记录[关闭]
【发布时间】:2024-05-21 18:35:02
【问题描述】:

我正在尝试创建一个只留下“yahoo Finance”的 SQL 查询,并删除以下数据集中的其他查询。该数据集是 InnoDB 表的一部分。

yahoo/finance

yahoo.finance

yahoo. finance

yahoo-finance

yahoo+finance

yahoo finance

yahoo .finance

yahoo . finance

yahoo - finance

yahoo + finance

我尝试编写一个通过忽略以下字符来删除重复项的 SQL 函数:/.,+-'。但是我失败了,我很感激任何帮助。谢谢!

【问题讨论】:

  • 致@VMAtm 和其他人——我真的不明白为什么这个问题是题外话

标签: mysql sql sql-server select replace


【解决方案1】:

试试这个:

SELECT DISTINCT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(columnA, '/', ' '), '.', ' '), ',', ' '), '+', ' '), '-', ' '), '  ', ' '), '  ', ' ')
FROM tableA;

【讨论】:

  • 这是最脏的,但在我的情况下它是最可靠的。
【解决方案2】:

您可能需要考虑将LIKE 与正则表达式模式一起使用。

也许是一个类似的 where 子句:

... WHERE Field LIKE 'yahoo[. -+]finance'

http://msdn.microsoft.com/en-us/library/ms179859.aspx

【讨论】:

    【解决方案3】:

    试试这个代码,

    SELECT * FROM table WHERE column REGEXP '^[A-Za-z ]+$'
    

    上面的代码将只匹配字母和空格。

    要删除其他条目,请尝试以下代码,

    DELETE FROM table WHERE column NOT REGEXP '^[A-Za-z ]+$';
    

    【讨论】:

      最近更新 更多