在SQL Server中检查字符串是否包含特定值

3
@Phoneno varchar
@Phoneno='(123)(4520)'

如何检查 @ Phoneno 中是否没有带括号的数字?示例
@Phoneno='()()' 

如果其中一个答案有帮助,您可以点击答案旁边的绿色勾选标记将其标记为已接受。这将帮助您在将来在Stack Overflow上提出更多问题时获得更多的答案 :) - Daniel Vassallo
4个回答

1

您可以使用REPLACE函数来删除括号:

DECLARE @Phoneno varchar(1000) = '(123)(4520)';

SET @Phoneno = REPLACE(REPLACE(@Phoneno, '(', ''), ')', '');

IF (ISNUMERIC(@Phoneno) = 1) 
   SELECT 'Phoneno not empty';
ELSE
   SELECT 'Phoneno empty or invalid';

对于像@Phoneno=')(1)(('这样的值怎么办? - KM.
嘿,朋友,感谢您的帮助。我已经实现了并得到了我所需的结果。再次感谢您,做得很好。 - senthi

1
如果您想检查电话号码是否符合格式 (nnn)(nnnn),其中第一部分必须有3个数字,第二部分必须有4个数字,您可以这样做:
if @Phoneno like '([0-9][0-9][0-9])([0-9][0-9][0-9][0-9])'
    print 'ok'
else
    print 'not ok'

ISNUMERIC 方法的一个小问题是它允许十进制和负号。这个问题可以通过将这些字符替换为空格来修复(但仍然不能验证正确的长度)。


+1,在这种情况下,最好的验证方式。至于ISNUMERIC(),如果您不想要包含负数或小数点的数字,则应该将“.”和“-”替换为“a”(而不是空格),以便检查失败。 - KM.

0

使用SQL Server内置的默认文本功能并不容易实现。

如果您使用的是SQL Server 2005及以上版本,则可以使用CLR函数 - 其中比较流行的是用于日期操作和正则表达式的函数。

正则表达式扩展可以实现此功能。


-1

使用规范化的形式存储数据,让应用程序解析和拆分数据,这样您只需将有效的数字存储在数据库中!如果必须存储“(”和“)”字符以便后续显示,请这么做,但如果没有值,请不要存储()(),而应将其存储为null


通常我会同意,但是对于像地址和电话号码这样的数据来说,这可能会非常棘手,特别是如果你需要支持i18n。有太多不同的表示方法,试图解析它们都会让你的头炸裂。 - Aaronaught
最好仍然在应用程序前端进行解析,如果没有值,则该列应为NULL而不是()() - KM.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接