【发布时间】:2015-02-15 07:39:36
【问题描述】:
我有两列包含电子邮件信息。 A 列,B 列。现在,在这些字段中,电子邮件应该是这样的:
Column A Column B
x@x.com; b@b.com abc@x.com; xyz@x.com
x@x.com;b@b.com abc@x.com;xyz@x.com
但是,为了进行一些数据质量检查等,事实证明许多条目并未遵循这种格式。我正在尝试查找所有异常值,并且我已经确定了异常值以采用以下形式:
x@x.com and b@b.com
x@x.com, b@b.com (uses comma so it is incorrect)
x@x.com or b@b.com
x@x.com / b@b.com
可能还有其他错误的字符或单词导致格式不正确。但我希望这些例子能指出问题所在。
我正在尝试做的事情: 创建一个查询以查明所有格式不正确的实例,以便稍后可以找到和编辑问题点,但这是一个不同的主题:)
这是我到目前为止的一个查询:
SELECT A_EMAIL, B_EMAIL, NAME, ID
FROM NAMES
WHERE A_EMAIL LIKE ('and %') OR A_EMAIL LIKE ('or %')
OR B_EMAIL LIKE ('and %') OR B LIKE ('or %')
这是使用 LIKE 并且 % 之间有一个空格。但是,这不会返回任何结果,而且我知道这样的结果确实存在。但我想建立一个逻辑,让我找回所有格式不正确的东西,而不是尝试使用 LIKE 'XYZ',因为即使我知道大部分问题,我仍然可能会错过一些。
但是,如果这样的事情通过 SQL 是不可能的。然后我仍然希望使用我当前的逻辑使用 LIKE ('XYZ %') 来代替它,即使不是最佳路线,也应该能够以某种方式帮助我实现目标。
【问题讨论】:
-
如果可能的话,你应该把它标准化。它会节省你数小时的悲伤,试图找出像这样的问题。
-
意思是,继续尝试并找到解决方案,它将给我所有的问题问题,而不是走 LIKE ('XYZ %') 类型的路线。理解并同意。但是,如果不可能,我将不得不求助于后一种路线。
-
不确定您的最后一条评论是什么意思,但是...我的意思是将电子邮件拆分为一个子表,这样您的表中的单个交集就不会有多个值。然后你可以向应用程序添加一些验证来捕获它以防止将来发生这种事情。
标签: sql sql-server string sql-like