2011-09-07 25 views
1

我有一個'customers'表,其中有'email'和'value'兩列。 'email'列包含電子郵件地址,'value'列包含NULL值。現在我想編寫一個Update命令,這樣如果電子郵件格式正確(a @ bc),那麼將'value'列設置爲'True',並且如果電子郵件地址格式錯誤(abc或@bc)然後將'值'列設置爲'假'。現在我的問題是如何編寫SQL命令來找出哪個電子郵件地址是正確的。請提供任何建議。謝謝。帶有電子郵件地址的SQL表列

+2

您正在使用哪種RDBMS? –

+1

在你做出這個決定之前,請閱讀[這篇文章](http://www.regular-expressions.info/email.html)。您需要考慮一些重要的權衡,例如,語法上有效的電子郵件地址可能無法傳送。 – cdhowie

回答

0

的代碼,以確定是關閉SQL方面好多了,寫在哪個語言你用得到這些電子郵件地址,然後只需使用簡單的查詢

+0

如果DBMS具有像樣的正則表達式支持,則看不到任何好處。 –

1

如果使用執行更新SQL-服務器這個例子(取自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 protected]',@email_address) = 0 AND CHARINDEX('..',@email_address) = 0) 
) 
    print 'valid email address' 
ELSE 
    print 'not valid' 

我認爲,改變print代碼與UPDATE...會做你的工作。

+1

@Abe Miessler:你是對的!我刪除了那部分...謝謝:) – Marco

0

在前端做這件事情會更好,並將驗證結果和電子郵件一起傳遞到數據庫。這似乎是一個正則表達式匹配的好例子。

2

如果您使用的是SQL Server 2005或更新版本,我會建議創建一個CLR函數來檢查您的電子郵件的有效性。看看這篇文章,以瞭解如何做到這一點: http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

一旦你有一個功能,找到您的電子郵件地址的正則表達式(以下嘗試),並使用update語句是這樣的:

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

發現的電子郵件地址是正確的

雖然你可以驗證數據庫中的值未能符合正確的模式對於電子郵件地址,數據庫不能驗證電子郵件地址是否可用於聯繫其預期收件人(封閉世界假設適用)。

模式匹配支持因SQL實現而異。例如,對於簡單模式匹配,SQL Server具有LIKE。最好針對特定故障編寫多個測試:不包含恰好一個@符號,沒有域,太長,包含允許的字符以外的字符等。通過給每個測試一個唯一的約束名稱,可以生成更細緻的錯誤消息傳達給用戶。

相關問題