【问题标题】:How can i get a range of number of characters in SQL Server using wildcard characters如何使用通配符在 SQL Server 中获取一定数量的字符
【发布时间】: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


【解决方案1】:

LEN (Transact-SQL)

where len(col) between 6 and 9

【讨论】:

    【解决方案2】:

    试试这个

    如果你想要最少 6 个字符和最多 9 个字符

    SELECT * FROM TABLE_NAME WHERE length(col) between 6 and 9
    

    如果你最多需要 9 个字符

    SELECT * FROM TABLE_NAME WHERE length(col) <= 9
    

    【讨论】:

      【解决方案3】:

      使用len?

      SELECT * FROM TABLE_NAME WHERE len(col) between 6 and 9
      

      【讨论】:

        猜你喜欢
        • 2012-05-08
        • 2018-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-07
        • 1970-01-01
        • 2012-04-30
        • 1970-01-01
        相关资源
        最近更新 更多