首页 > 解决方案 > 使用 BETWEEN 和 WILDCARD 的解决方法

问题描述

我有一个相当大的表,其中包含 ICD10 代码 ( icd10_table)。我想根据范围提取一堆不同的 ICD10 代码(code)。简而言之,有些父级 ICD10 代码具有“子级”,可以非常广泛。例如:ICD10 'M04'可以包括'M041'、'M045'、'M04679'、'M04000'、'M04999'等等。这里真的没有模式,查找和找出每一个组合非常耗时。在正常情况下,像这样带有通配符的简单查询会提取我需要的所有内容:

SELECT *
FROM icd10_table
WHERE code LIKE 'M04%'

但是,我正在尝试提取特定 ICD10 代码的范围,并尝试执行以下操作:

SELECT *
FROM icd10_table
WHERE code BETWEEN 'M00' AND 'M02%'
OR code BETWEEN 'M04' AND 'M04%'
OR code BETWEEN 'M05' AND 'M14%'
OR code BETWEEN 'M15' AND 'M19%'

但这只是切断了子 ICD10,实际上并没有应用通配符。使用 BETWEEN 和通配符将每个父/子 ICD10 拉到范围内的好解决方法是什么?

标签: sqlapache-spark-sql

解决方案


尝试这样的事情:

SELECT *
FROM icd10_table
WHERE code >= 'M00' AND code < 'M02' OR
      code >= 'M04' AND code < 'M05' OR
      code >= 'M05' AND code < 'M15' OR
      code >= 'M15' AND code < 'M20' 

您的公式'%'的 ASCII 值小于任何数字,因此它有效地切断了比较。


推荐阅读