【发布时间】:2018-06-29 08:51:27
【问题描述】:
我有一个查询,我需要过滤该值是否有 6 个或 7 个或 8 个或 9 个字符不超过该值。这个我知道
SELECT * FROM TABLE_NAME WHERE col LIKE '______' OR col LIKE '_______' and so on..
有没有一种通用的方法来过滤字符数。如果它变化很大怎么办?我需要把这个 OR 放在这么多的条件下吗
【问题讨论】:
-
从表中选择 *,其中 len(col) 在 6 和 9 之间
-
这听起来像XY Problem。你有一个问题 X 并认为按长度 (Y) 过滤是解决方案。当 Y 不起作用时,您询问的是 Y,而不是实际的问题 X。您为什么需要这样做?这样的查询不能使用索引并被强制扫描表中的所有行。使用通配符也不会允许它使用索引。
-
您可以使用
LEN(Col) between 6 and 9,但也不会使用索引。为什么要关心长度?该字段是否包含不同类型的数据?那将是一个设计问题。如果不是不同的表,您应该为不同类型的数据使用不同的字段。您还可以添加一个单独的字段来存储数据的类别/类型。这将允许您使用索引并以数千倍的速度执行搜索
标签: sql-server wildcard