我有一个表'客户',其中有两列'电子邮件'和'价值'。 “email”列包含电子邮件地址,“value”列包含NULL值。现在我想编写一个更新命令,这样如果电子邮件的格式正确(@ bc),那么使用'True'设置'value'列,如果电子邮件地址格式错误(abc或@bc)然后用'False'设置'value'列。现在我的问题是如何编写SQL命令以找出哪个电子邮件地址是正确的。有任何建议请。感谢。
答案 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
用于简化模式匹配。最好为特定故障编写多个测试:不包含一个@
符号,没有域,太长,包含允许的字符以外的字符等。通过为每个测试提供唯一的约束名称,更精细错误消息可以传达给用户。