【问题标题】:Best way to filter data for a given range过滤给定范围数据的最佳方法
【发布时间】:2022-01-21 06:38:10
【问题描述】:

我需要从给定表中查找具有“Q5000”和“Q5090”范围之间的过程代码的声明。我可以为 Int 代码编写一个函数,但不确定如何最好地处理 SQL Server 中的字符范围?

我可以手动编写所有代码并过滤它们,但有什么方法可以提供第一个和最后一个值,SQL 会生成完整的值集。

Select * 
from   dbo.claims 
where  ProcedureCode in ('Q5000',Q5001','Q5002',....,'Q5090')

【问题讨论】:

  • 请出示您的查询并解释您遇到的问题。还包括一些示例数据和预期结果
  • Select * from dbo.claims where ProcedureCode in ('Q5000',Q5001','Q5002',....,'Q5090') 我有类似的条件需要应用并且在 IN 条件中键入每个代码将需要付出很多努力。所以希望应用某种可以执行此操作的功能!
  • 您可以使用WHERE ProcedureCode BETWEEN 'Q5000' AND 'Q5090' 或使用>=<= 运算符

标签: sql sql-server tsql


【解决方案1】:

你可以试试这个简单的技巧

选择 * FROM dbo.claims WHERE ProcedureCode LIKE 'Q50__' AND TRY_CONVERT(INT, RIGHT(ProcedureCode, 2))

【讨论】:

    【解决方案2】:

    另一个帖子中的这个answer 可能对你有帮助。

    您也可以尝试这个假设相同的单个字符是开始字符。

    SELECT * FROM dbo.claims WHERE RIGHT(ProcedureCode, LEN(ProcedureCode)-1) BETWEEN 5000 AND 5090

    【讨论】:

      【解决方案3】:

      如果字符串的长度相同,并且以相同的字母开头?
      然后你可以简单地使用BETWEEN

      Select * 
      from   dbo.claims 
      where  ProcedureCode BETWEEN 'Q5000' AND 'Q5090'
      

      你看,字符比较的问题在于长度不同。

      例如,字符串“2”大于字符串“10”。
      因为字符“2”出现在“1”之后。
      但是“A02”比“A10”小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-24
        • 1970-01-01
        相关资源
        最近更新 更多