如何使用SQL模式匹配检查特定字符串的结尾?

时间:2010-06-22 15:33:29

标签: sql pattern-matching

我正在尝试使用sql模式匹配来检查字符串值是否格式正确。

字符串代码应具有正确的格式:

alphanumericvalue.alphanumericvalue

因此,以下是有效代码:

D0030.2190
C0052.1925
A0025.2013

以下是无效代码:

D0030
.2190
C0052.
A0025.2013.
A0025.2013.2013

到目前为止,我有以下SQL IF子句来检查字符串是否正确:

IF @vchAccountNumber LIKE '_%._%[^.]'

我相信“_%”部分会检查一个或多个字符。因此,此语句检查一个或多个字符,后跟“。”。字符,后跟一个或多个字符,并检查最终字符不是“。”。

似乎这适用于所有组合,除了IF子句允许作为有效代码的以下格式:

A0025.2013.2013

我无法更正此IF子句,以允许它将此格式视为不正确。任何人都可以帮我纠正这个问题吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

stackoverflow question提及使用字边界:[[:<:]][[:>:]]用于整个字词匹配。您可以使用此功能,因为代码中没有空格。

答案 1 :(得分:1)

这是ANSI SQL解决方案

此LIKE表达式将找到任何模式 not alphanumeric.alphanumeric。所以不要只想找到符合你想要的东西:

IF @vchAccountNumber NOT LIKE '%[^A-Z0-9].[^A-Z0-9]%'

但是,根据您的示例,您可以使用此...

LIKE '[A-Z][0-9][0-9][0-9][0-9].[0-9][0-9][0-9][0-9]'

...或者如果你5 alphas, dot, 4 alphas

那样的话
LIKE '[A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9].[A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]'

对于固定长度值,第二个稍微明显一点。第一个稍微不那么直观,但在点的任一侧使用可变长度代码。

其他SO问题Creating a Function in SQL Server with a Phone Number as a parameter and returns a Random NumberBest equivalent for IsInteger in SQL Server