【问题标题】:Need a way of finding special characters in data using SQL query需要一种使用 SQL 查询在数据中查找特殊字符的方法
【发布时间】:2017-09-30 07:50:59
【问题描述】:

我试图在我的任何字段中查找不在 a-zA-Z0-9 范围内的特殊字符。但是,如果我尝试这个查询:

select Name from table where Name like '%[?]%'

我得到两条记录:

  • ???? ?????
  • 已修复?????

这是我想要的。但是,由于我不知道特殊字符是什么,因此我需要排除具有混合字符的数据:

select Name from table where Name NOT like '%[a-zA-Z0-9]%'

由于这排除了所有带有 a-zA-Z0-9 的记录,我只得到:

  • ???? ?????

但我还需要得到“固定??????”结果。我需要获取合并了特殊字符的数据。

我不知道如何做到这一点。我已经看到使用 shell 脚本或 'vi' (LIST) 完成此操作,但在 SQL 中这并不容易。

有没有人解决这个问题?

【问题讨论】:

  • 你要的函数是patindex。

标签: sql sql-server regex data-cleaning


【解决方案1】:

试试这个代码:

select Name from table where Name like '%[^0-9a-zA-Z ]%'

【讨论】:

    【解决方案2】:

    感谢您的回复。我已经尝试过你的建议,但我仍然得到更多的结果。但是,看起来您可以通过排除来获得非常具体的信息。最终,我最终从我得到的数据中添加了结果。

    像这样:

    select Name from table where Name LIKE '%[^0-9a-zA-Z() -._/\:=,]%'
    

    这终于给了我想要的东西。虽然我现在遇到的新问题是如何抑制数据中显然也存在的 [] 括号:

    • ???? ?????
    • HP PCI 10/100Base-TX 核心 [100BASE-TX,FD,AUTO,TT=1500]
    • 已修复?????

    将这些括号添加到查询中会破坏数组边界:

    '%[^0-9a-zA-Z() -._/\:=,**[]**]%' 
    

    但是,这是我可以处理的。只要我没有得到“所有”数据。

    【讨论】:

    【解决方案3】:
    LIKE '%[^0-9a-zA-Z]%'
    

    数字 (0-9)、小写字母 (a-z)、大写字母 (A-Z)。 “^”使它成为这些东西中的“NOT”之一

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多