T-SQL:检查电子邮件格式

6 浏览
0 Comments

T-SQL:检查电子邮件格式

我有一个情境,我需要在物理数据库中保持数据的完整性。例如,我有一个变量 @email_address VARCHAR(200),我想要检查 @email_address 的值是否符合电子邮件的格式。有人知道如何在 T-SQL 中检查格式吗?非常感谢!

0
0 Comments

T-SQL: 检查电子邮件格式

在使用SQL Server 2005或2008时,您可能希望考虑编写CLR存储过程并使用.NET正则表达式引擎。如果您正在使用SQL Server 2000或更早版本,您可以使用VBScript脚本引擎的正则表达式。您还可以使用扩展存储过程。

在SQL Server 2005或2008中,您可以使用CLR存储过程来检查电子邮件的格式。CLR是公共语言运行时,它允许您在SQL Server中使用.NET Framework中的代码。您可以编写一个CLR存储过程,其中包含使用.NET正则表达式引擎来检查电子邮件格式的代码。通过使用CLR存储过程,您可以利用.NET Framework中强大的正则表达式功能来验证电子邮件地址。

对于SQL Server 2000或更早版本,您可以使用VBScript脚本引擎的正则表达式功能来检查电子邮件的格式。VBScript是一种基于COM的脚本语言,可以与SQL Server集成使用。您可以编写一个VBScript脚本,其中包含用于检查电子邮件格式的正则表达式。然后,您可以在T-SQL代码中调用这个VBScript脚本来验证电子邮件地址。

另外,您还可以使用扩展存储过程来检查电子邮件的格式。扩展存储过程是一种自定义的存储过程,可以在SQL Server中执行外部代码。您可以编写一个扩展存储过程,其中包含用于验证电子邮件格式的代码。然后,您可以在T-SQL代码中调用这个扩展存储过程来检查电子邮件地址。

总之,在SQL Server中检查电子邮件格式的方法取决于您使用的SQL Server版本。对于SQL Server 2005或2008,您可以使用CLR存储过程和.NET正则表达式引擎。对于SQL Server 2000或更早版本,您可以使用VBScript脚本引擎的正则表达式功能。您还可以使用扩展存储过程来实现相同的功能。无论您选择哪种方法,都可以通过验证电子邮件地址的格式来提高数据的准确性和完整性。

0
0 Comments

T-SQL: 检查电子邮件格式

在T-SQL中,检查电子邮件格式的问题是一个常见的需求。然而,由于电子邮件的格式非常复杂,没有一种理想的方法可以完美地解决这个问题。有些电子邮件解析器的代码可能长达数千行,即使你使用一个较简单的形式,它可能会无法识别一些罕见但是有效的电子邮件地址。此外,T-SQL并不原生支持正则表达式,这也限制了我们使用正则表达式进行电子邮件格式验证的能力。

然而,我们仍然可以使用一种简单的方法来进行基本的电子邮件格式验证。一个常见的做法是使用LIKE语句来进行模式匹配。例如,我们可以使用以下的LIKE语句来检查电子邮件地址中是否包含@符号和.符号:

LIKE '%_@_%_.__%'

这个模式可以检查电子邮件地址中是否包含一个@符号,以及至少有一个字符和一个点符号。虽然这个方法并不能完全保证电子邮件地址的有效性,但对于基本的验证来说已经足够了。

然而,我个人认为在最后一刻(即将将数据插入数据库)进行电子邮件格式验证并不是一个好的做法。相反,我们应该在第一时间或者在通用的网关(实际执行SQL插入请求的控制器)中进行验证。在这些地方,我们可以使用正则表达式,甚至使用现有的库来进行“真实”的电子邮件格式验证。

虽然T-SQL本身不直接支持正则表达式,但我们仍然可以使用一些简单的方法来进行基本的电子邮件格式验证。对于更复杂的验证需求,我们可以考虑在数据插入之前或者在通用网关中使用正则表达式进行验证。这样可以确保我们的数据具有有效的电子邮件地址,同时避免了T-SQL本身对正则表达式的限制。

0
0 Comments

问题的出现原因:这段代码是用来检查电子邮件格式是否正确的,但是有用户提到在MSSQL 2008上无法正常工作。

解决方法:可能是因为MSSQL 2008的语法和函数支持不同,导致这段代码无法在该版本上运行。可以尝试使用其他方法或函数来检查电子邮件格式,或者升级到MSSQL 2012版本。

以下是重新整理后的文章:

在T-SQL中检查电子邮件格式

在进行数据验证时,经常需要检查电子邮件格式是否正确。下面的代码是一个检查电子邮件格式的示例,它使用了一系列条件来判断一个字符串是否符合电子邮件地址的格式。

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

这段代码检查了以下条件:

- 不能有空格

- '@' 不能是电子邮件地址的第一个字符

- '.' 不能是电子邮件地址的最后一个字符

- '@' 后面必须有一个 '.'

- '@' 符号是允许的

- 域名必须以至少两个字符的扩展名结尾

- 不能有像 '.@' 和 '..' 这样的模式

然而,有用户提到这段代码在MSSQL 2008上无法正常工作。可能是因为MSSQL 2008的语法和函数支持不同,导致这段代码无法在该版本上运行。为了解决这个问题,可以尝试使用其他方法或函数来检查电子邮件格式,或者升级到MSSQL 2012版本。

感谢用户提供的问题和反馈,希望这篇文章能帮助到其他遇到类似问题的用户。

0