带有电子邮件地址的SQL表列

时间:2011-09-07 19:55:18

标签: sql

我有一个表'客户',其中有两列'电子邮件'和'价值'。 “email”列包含电子邮件地址,“value”列包含NULL值。现在我想编写一个更新命令,这样如果电子邮件的格式正确(@ bc),那么使用'True'设置'value'列,如果电子邮件地址格式错误(abc或@bc)然后用'False'设置'value'列。现在我的问题是如何编写SQL命令以找出哪个电子邮件地址是正确的。有任何建议请。感谢。

5 个答案:

答案 0 :(得分:2)

如果您使用的是SQL Server 2005或更新版本,我建议您创建一个CLR函数来检查电子邮件的有效性。看看这篇文章,了解这是如何完成的: http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

一旦你有一个函数找到你的电子邮件地址的正则表达式(在下面尝试)并使用这样的更新语句:

UPDATE Customers
SET Value = dbo.RegexMatch( email , N'^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$' )

答案 1 :(得分:1)

如果您使用SQL-Server,此示例(取自here)可以帮助您。

IF (
     CHARINDEX(' ',LTRIM(RTRIM(@email_address))) = 0 
AND  LEFT(LTRIM(@email_address),1) <> '@' 
AND  RIGHT(RTRIM(@email_address),1) <> '.' 
AND  CHARINDEX('.',@email_address ,CHARINDEX('@',@email_address)) - CHARINDEX('@',@email_address ) > 1 
AND  LEN(LTRIM(RTRIM(@email_address ))) - LEN(REPLACE(LTRIM(RTRIM(@email_address)),'@','')) = 1 
AND  CHARINDEX('.',REVERSE(LTRIM(RTRIM(@email_address)))) >= 3 
AND  (CHARINDEX('.@',@email_address ) = 0 AND CHARINDEX('..',@email_address ) = 0)
)
   print 'valid email address'
ELSE
   print 'not valid'

我认为使用print更改UPDATE...代码可以完成您的工作。

答案 2 :(得分:0)

用于确定SQL端更好的代码,用您用于获取这些电子邮件地址的任何语言编写,然后使用简单查询执行更新

答案 3 :(得分:0)

在前端执行此操作会更好,并将验证结果与电子邮件一起传递到数据库。这似乎是正则表达式匹配的好例子。

答案 4 :(得分:0)

  

找出哪个电子邮件地址是正确的

虽然您可以在数据库中验证不符合电子邮件地址的正确模式,但数据库无法验证是否可以使用电子邮件地址联系其预定的收件人(适用封闭世界的假设)。

支持模式匹配因SQL实现而异。例如,SQL Server具有LIKE用于简化模式匹配。最好为特定故障编写多个测试:不包含一个@符号,没有域,太长,包含允许的字符以外的字符等。通过为每个测试提供唯一的约束名称,更精细错误消息可以传达给用户。

相关问题