是否可以使用SQL中的“Where”子句仅显示仅包含字母和字母的字段。数字?

时间:2011-08-26 12:41:54

标签: sql sql-server tsql select where

我希望只能选择某个字段包含字母和数字的字段。例如:

Select [field1], [field2] 

from [db1].[table1] 

where [field2] = *LETTERS AND NUMBERS*

我正在使用SQL Server 2005,也很抱歉,我不是百分之百确定该字段的数据类型,因为它位于链接服务器上并且在一分钟内无法访问。希望你能帮忙

:)

5 个答案:

答案 0 :(得分:9)

LIKE会这样做。这是一个双重否定

where [field2] NOT LIKE '%[^0-9a-z]%'

它说:

  • %[^0-9a-z]%表示not (alphanumeric)
  • NOT LIKE '%[^0-9a-z]%'表示not(not(alphanumeric)) - >字母数字

编辑:

对于所有数字......“它有效”

SELECT 'it works' WHERE '1234567' NOT LIKE '%[^0-9a-z]%'

所有字母

SELECT 'it works' WHERE 'abcdefg' NOT LIKE '%[^0-9a-z]%'

包含非字母数字

SELECT 'it works' WHERE 'abc_123' NOT LIKE '%[^0-9a-z]%'

编辑2:

此解决方案适用于

  

只有字母数字,字母和数字的任何混合

编辑3:

字母后跟数字

where [field2] NOT LIKE '%[^0-9a-z]%' AND [field2] LIKE '[a-z]%[0-9]'

<击>

编辑:

最后,2个字母和最多3个数字

where
   [field2] LIKE '[a-z][a-z][0-9]'
   OR
   [field2] LIKE '[a-z][a-z][0-9][0-9]'
   OR
   [field2] LIKE '[a-z][a-z][0-9][0-9][0-9]'

答案 1 :(得分:2)

您想要做的是基于SQL的正则表达式匹配。看看这个:http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

行情:

“虽然T-SQL对于大多数数据处理来说非常强大,但它几乎不支持文本分析或操作。尝试使用内置字符串函数执行任何复杂的文本分析会导致大量的函数和存储过程难以调试和维护。“

“然而,SQLCLR是一个CLR用户定义函数(UDF),它允许您使用Microsoft®.NETFramework创建一组高效且不易出错的函数。”

然后你会得到代码示例。微软不是很棒吗? :d

答案 2 :(得分:2)

如果你需要它包含数字和字母,而不包含其他字符,我认为你必须使用3个like子句。一个NOT LIKE,正如@gbn所说,然后是2 LIKE以确保两个字符类都被表示:

select * from (select '123' union all select 'abc' union all select 'a2') t(Field)
where Field LIKE '%[0-9]%' and Field like '%[a-z]%'
AND Field NOT LIKE '%[^0-9a-z]%'

返回一行,'a2'


如果它只是字母后跟数字,我想你可能能够实现这一目标,而不是再次受到@gbn的启发:

NOT LIKE '%[0-9]%[a-z]%'

但它开始看起来像CLR中的正则表达式可能是首选路线。

答案 3 :(得分:1)

我相信PATINDEX会为你做的伎俩。下面的查询检查非0-9和非a-z字符,如果没有找到任何字符则返回0(即只有#s和字母)

Select [field1], [field2] 
from [db1].[table1] 
where patindex('%[^0-9a-z]%', [field2]) = 0

答案 4 :(得分:0)

Select [field1], [field2] 

from [db1].[table1] 

where [field2] REGEXP '^[0-9a-fA-F]*$'