我正在尝试使用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子句,以允许它将此格式视为不正确。任何人都可以帮我纠正这个问题吗?
谢谢。
答案 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 Number和Best equivalent for IsInteger in SQL Server