我有一個'customers'表,其中有'email'和'value'兩列。 'email'列包含電子郵件地址,'value'列包含NULL值。現在我想編寫一個Update命令,這樣如果電子郵件格式正確(a @ bc),那麼將'value'列設置爲'True',並且如果電子郵件地址格式錯誤(abc或@bc)然後將'值'列設置爲'假'。現在我的問題是如何編寫SQL命令來找出哪個電子郵件地址是正確的。請提供任何建議。謝謝。帶有電子郵件地址的SQL表列
回答
的代碼,以確定是關閉SQL方面好多了,寫在哪個語言你用得到這些電子郵件地址,然後只需使用簡單的查詢
如果DBMS具有像樣的正則表達式支持,則看不到任何好處。 –
如果使用執行更新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...
會做你的工作。
@Abe Miessler:你是對的!我刪除了那部分...謝謝:) – Marco
在前端做這件事情會更好,並將驗證結果和電子郵件一起傳遞到數據庫。這似乎是一個正則表達式匹配的好例子。
如果您使用的是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}$')
發現的電子郵件地址是正確的
雖然你可以驗證數據庫中的值未能符合正確的模式對於電子郵件地址,數據庫不能驗證電子郵件地址是否可用於聯繫其預期收件人(封閉世界假設適用)。
模式匹配支持因SQL實現而異。例如,對於簡單模式匹配,SQL Server具有LIKE
。最好針對特定故障編寫多個測試:不包含恰好一個@
符號,沒有域,太長,包含允許的字符以外的字符等。通過給每個測試一個唯一的約束名稱,可以生成更細緻的錯誤消息傳達給用戶。
- 1. 確定是否電子郵件地址的郵件列表地址或個人電子郵件地址
- 2. 組的電子郵件地址,該地址在列表
- 3. 選擇電子郵件地址只(SQL)
- 4. 沒有得到朋友列表的電子郵件地址
- 5. 有效的電子郵件地址
- 6. 檢查其他列表的電子郵件地址列表
- 7. 刮電子郵件地址
- 8. 在電子郵件地址
- 9. noreply電子郵件地址。
- 10. Rtrtr.com電子郵件地址
- 11. 從電子郵件地址
- 12. Django電子郵件地址
- 13. 帶有電子郵件地址的WebApi Facebook身份驗證
- 14. 只有電子郵件地址
- 15. 選擇所有電子郵件地址,
- 16. 從給定的電子郵件地址獲取電子郵件地址DirectoryEntry
- 17. 電子郵件地址中編碼的電子郵件地址。可能嗎?
- 18. SQL分裂電子郵件數據分隔的電子郵件地址
- 19. 地帶的電子郵件地址後綴
- 20. 有效的電子郵件地址 - XSS和SQL注入
- 21. GMail:這個listserv電子郵件地址是哪個電子郵件地址?
- 22. JMeter - 如何模擬電子郵件地址和確認電子郵件地址
- 23. 我有一個Excel電子郵件地址列表,我需要發送電子郵件給。主題和正文在電子郵件地址
- 24. 文件夾的電子郵件地址
- 25. hCard:將聯繫表格作爲電子郵件地址列表
- 26. 基於包含電子郵件地址的gridview列發送電子郵件
- 27. 電子郵件SQL查詢結果每天多個電子郵件地址
- 28. PHPMailer - 發送帶有附件的電子郵件到多個人和從MySql下載的電子郵件地址
- 29. 正則表達式 - 匹配的電子郵件中的文件名,電子郵件地址的返回列表
- 30. 顯示名稱列表中需要的電子郵件地址
您正在使用哪種RDBMS? –
在你做出這個決定之前,請閱讀[這篇文章](http://www.regular-expressions.info/email.html)。您需要考慮一些重要的權衡,例如,語法上有效的電子郵件地址可能無法傳送。 – cdhowie