Sql 使用介于和通配符之间的变通方法

Sql 使用介于和通配符之间的变通方法,sql,apache-spark-sql,Sql,Apache Spark Sql,我有一个相当大的表,其中包含ICD10代码(ICD10\u表)。我想根据范围提取一组不同的ICD10代码(code)。简言之,有些父级ICD10代码的“子级”可以非常扩展。例如: ICD10“M04”可以包括“M041”、“M045”、“M04679”、“M04000”、“M04999”等。这里真的没有一个模式,查找并找出每一个组合都非常耗时。在正常情况下,使用这样的通配符的简单查询将提取我需要的所有内容: SELECT * FROM icd10_table WHERE code LIKE 'M

我有一个相当大的表,其中包含ICD10代码(
ICD10\u表
)。我想根据范围提取一组不同的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有什么好的解决方法?

尝试以下方法:

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' 
选择*
从icd10_表
其中代码>='M00'和代码<'M02'或
代码>='M04'和代码<'M05'或
代码>='M05'和代码<'M15'或
代码>='M15'和代码<'M20'

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

你可以只使用“>=”M00“和<'M03”吗?你只能在
类似的
子句中使用通配符。很遗憾,这里没有简单的答案。正如@svenhalvorson所建议的,您必须构建多个>=和<子句/