@Phoneno varchar
@Phoneno='(123)(4520)'
如何检查@ Phoneno是否没有在箭头方括号中的数字? 例如在sql server中检查字符串是否包含特定值
@Phoneno='()()'
@Phoneno varchar
@Phoneno='(123)(4520)'
如何检查@ Phoneno是否没有在箭头方括号中的数字? 例如在sql server中检查字符串是否包含特定值
@Phoneno='()()'
这是不容易的,内置到SQL Server默认的文本功能做。
如果您使用的是SQL Server 2005及更高版本,则可以使用CLR功能 - 其中一种比较受欢迎的功能是日期处理功能,regular expressions。
正则表达式扩展可以做到这一点。
您可以用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';
对于像这样的值呢:'@Phoneno =')(1)(('' – 2010-03-11 15:29:21
嘿...男人谢谢你帮助...我已经实施并获得了我的要求的结果...再一次感谢你...伟大的工作 – senthi 2010-03-11 16:23:51
店规范化形式您的数据,使应用程序解析和分裂这个,所以你可以只保存有效号码在数据库中!如果您必须存储“(”和“)”字符供以后显示,请这样做,但如果没有值,请不要将()()
存储为null
。
通常我会同意,但是这对于地址和电话号码等数据来说可能相当棘手,特别是如果您必须支持i18n。有很多不同的表示,试图解析它们都会让你的头部爆炸。 – Aaronaught 2010-03-11 15:20:46
仍然是最好在应用程序前端解析,如果没有值,那么该列应该为NULL而不是'()()' – 2010-03-11 15:23:52
如果你想检查电话号码是否是格式为(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”(不是空格)替换“。”和“ - ”检查失败。 – 2010-03-11 16:05:21
使用'LIKE'%()%''? – 2010-03-11 15:01:45
@senthi:如果其中一个答案有帮助,您可能需要通过点击答案旁边的绿色勾号来将其标记为已接受。这将帮助你在将来得到更多的答案,如果你要求进一步的问题堆栈溢出:) – 2010-03-11 19:45:45