我有這種場景,我需要物理數據庫中的數據完整性。例如,我有一個變量@email_address VARCHAR(200)
,我想檢查@email_address
的值是否爲電子郵件格式。任何人有任何想法如何檢查T-SQL格式?T-SQL:檢查電子郵件格式
非常感謝!
我有這種場景,我需要物理數據庫中的數據完整性。例如,我有一個變量@email_address VARCHAR(200)
,我想檢查@email_address
的值是否爲電子郵件格式。任何人有任何想法如何檢查T-SQL格式?T-SQL:檢查電子郵件格式
非常感謝!
我測試了以下查詢,其中包含許多不同的錯誤和有效的電子郵件地址。它應該完成這項工作。
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'
它會檢查這些條件:
謝謝!我對你發佈的條件沒有一個想法。感謝你的回答! – jerbersoft 2009-01-09 00:12:57
@splattne ...這個函數在mssql 2008上不起作用。它是在mssql 2012上工作的很好的函數,但在2008上不是這樣。 – IBM 2016-05-03 18:36:34
AFAIK沒有好辦法做到這一點。
電子郵件格式標準是如此複雜的解析器已知運行到數千行代碼,但即使您使用的是一個更簡單的表單,它會失敗一些晦澀但有效的地址,這本身不T-SQL支持正則表達式(再次,我不是100%),讓你有somethign像一個簡單的回退:
LIKE '%[email protected]_%_.__%'
..或相似。
我的感覺通常是,你不應該在最後時刻這樣做(儘管插入到數據庫中),你應該在第一個機會和/或公共網關(控制器實際上使SQL插入請求),順便說一句,你會有正則表達式的優勢,甚至可能是一個庫,它會爲你「進行真正的」驗證。
可能重複的[Sql腳本來查找無效的電子郵件地址](http://stackoverflow.com/questions/801166/sql-script-to-find-invalid-email-addresses) – Neolisk 2015-01-28 15:27:03