寻找一个简洁的 SQL 查询
Looking for a neat SQL query
有人可以给我一些建议,是否可以缩短这一行:
and docs.Filename not like '%^ABC.%'
and docs.Filename not like 'Element%'
and docs.Filename not like 'Sheet%'
and docs.Filename not like '%^Copy%'
像这样:
and docs.Filename not like ('%^ABC.%' OR 'Element%' OR 'Sheet%' OR '%^Copy%')
现在 SQL Server 2014 Management Studio 出现问题;它告诉我这是 'OR'.
的错误语法
对于这几个值,这可能稍微 更长 ,但是随着您添加更多值并使匹配的值更紧密地放在一起,它会更好地缩放 repetition.The 关键是将项目放在 Table Value Constructor 中。这也让您以后可以轻松转换为实际的 table。
SELECT docs.*
FROM docs
WHERE NOT EXISTS (
SELECT 1 FROM (VALUES
('%^ABC.%'), ('Element%'), ('Sheet%'), ('%^Copy%')
) matcher(val)
WHERE docs.Filename LIKE matcher.val
)
De Morgan 说你可以改写为:
and not ( docs.Filename like '%^ABC.%' or docs.Filename like 'Element%' or
docs.Filename like 'Sheet%' or docs.Filename like '%^Copy%' )
除非您正在玩 Code Golf,否则这不是什么重大变化。
有人可以给我一些建议,是否可以缩短这一行:
and docs.Filename not like '%^ABC.%'
and docs.Filename not like 'Element%'
and docs.Filename not like 'Sheet%'
and docs.Filename not like '%^Copy%'
像这样:
and docs.Filename not like ('%^ABC.%' OR 'Element%' OR 'Sheet%' OR '%^Copy%')
现在 SQL Server 2014 Management Studio 出现问题;它告诉我这是 'OR'.
的错误语法对于这几个值,这可能稍微 更长 ,但是随着您添加更多值并使匹配的值更紧密地放在一起,它会更好地缩放 repetition.The 关键是将项目放在 Table Value Constructor 中。这也让您以后可以轻松转换为实际的 table。
SELECT docs.*
FROM docs
WHERE NOT EXISTS (
SELECT 1 FROM (VALUES
('%^ABC.%'), ('Element%'), ('Sheet%'), ('%^Copy%')
) matcher(val)
WHERE docs.Filename LIKE matcher.val
)
De Morgan 说你可以改写为:
and not ( docs.Filename like '%^ABC.%' or docs.Filename like 'Element%' or
docs.Filename like 'Sheet%' or docs.Filename like '%^Copy%' )
除非您正在玩 Code Golf,否则这不是什么重大变化。