使用Sql Server 2012我想查询一个表,只获取某些列不为空或不包含空字符串的行。
我需要检查的列是否为空,“所有列都以 col_as 或 col_m 开头,后跟两位数字。
目前我写where col_as01 is not null or
....
由于我必须检查的列数量,这很难维护。
有更优雅的方法吗?某种循环?
我还在select stmt中使用ISNULL(NULLIF([col_as01],''),Null)AS [col_as01]来删除空字符串值。
谢谢你的帮助。
答案 0 :(得分:2)
你应该填空。
select
@myWhereString =stuff((select 'or isnull('+COLUMN_NAME+','''') = '''' ' as [text()]
from Primebet.INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'YourTable'
and (column_name like 'col_as%'
or
column_name like 'col_m%')
for xml path('')),1,3,'')
set @myWhereString ='rest of your query'+ @myWhereString
exec executesql with your query
答案 1 :(得分:0)
你可以使用这样的东西
WHERE DATALENGTH(col_as01) > 0
这将隐式排除空值,长度大于0将保证您检索非空字符串。
PS:您也可以使用LEN
而不是DATALENGTH
,但这会在开头和结尾修剪字符串中的空格,这样您就不会获得仅包含空格的值。
答案 2 :(得分:0)
这很简单:
WHERE col_as01 > ''