2010-03-11 157 views
3
@Phoneno varchar 
@Phoneno='(123)(4520)' 

如何检查@ Phoneno是否没有在箭头方括号中的数字? 例如在sql server中检查字符串是否包含特定值

@Phoneno='()()' 
+1

使用'LIKE'%()%''? – 2010-03-11 15:01:45

+0

@senthi:如果其中一个答案有帮助,您可能需要通过点击答案旁边的绿色勾号来将其标记为已接受。这将帮助你在将来得到更多的答案,如果你要求进一步的问题堆栈溢出:) – 2010-03-11 19:45:45

回答

0

这是不容易的,内置到SQL Server默认的文本功能做。

如果您使用的是SQL Server 2005及更高版本,则可以使用CLR功能 - 其中一种比较受欢迎的功能是日期处理功能,regular expressions

正则表达式扩展可以做到这一点。

1

您可以用REPALCE功能去掉括号:

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'; 
+0

对于像这样的值呢:'@Phoneno =')(1)(('' – 2010-03-11 15:29:21

+0

嘿...男人谢谢你帮助...我已经实施并获得了我的要求的结果...再一次感谢你...伟大的工作 – senthi 2010-03-11 16:23:51

-1

店规范化形式您的数据,使应用程序解析和分裂这个,所以你可以只保存有效号码在数据库中!如果您必须存储“(”和“)”字符供以后显示,请这样做,但如果没有值,请不要将()()存储为null

+0

通常我会同意,但是这对于地址和电话号码等数据来说可能相当棘手,特别是如果您必须支持i18n。有很多不同的表示,试图解析它们都会让你的头部爆炸。 – Aaronaught 2010-03-11 15:20:46

+0

仍然是最好在应用程序前端解析,如果没有值,那么该列应该为NULL而不是'()()' – 2010-03-11 15:23:52

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方法的次要事情是它会允许小数和减号。这可以通过将这些字符替换为空白来解决(但仍然不能验证正确的长度)。

+0

+ 1,在这种情况下验证的最好方法就ISNUMERIC()而言,如果你不想包含负数或小数点的数字,我会用“a”(不是空格)替换“。”和“ - ”检查失败。 – 2010-03-11 16:05:21

相关问题