访问将通配符值与表进行比较

Posted

技术标签:

【中文标题】访问将通配符值与表进行比较【英文标题】:Access compare wildcard values to table 【发布时间】:2017-01-06 21:44:27 【问题描述】:

这本身就是一个简单的问题,但我的困境是我将 1,000 多个医疗诊断代码与整个 ICD9 表进行比较。

我有一个截断代码列表,可以与整个数据库进行比较。例如,我截断了代码 010,但整个 ICD9 数据库表有 010.01、010.02、....010.96 并且应该返回 010* 内的所有值。

我正在使用的截断代码列表是可变的,包含 800-1,300 多个通配符代码,Access 在查询中的变量限制为 40 个。

我找到了this help topic,但不明白如何将其转换为我的需要。以下是我当前设置的查询的 SQL,但已将其缩短为仅要搜索的几个值。如果有办法将通配符代码放入自己的表中并连接到 ICD9 表中,那就太好了……但我的专业知识不知道如何使用另一个表来搜索通配符。

SELECT [ICD9-10 Code Match].[ICD9 Code]
FROM [ICD9-10 Code Match]
WHERE ((([ICD9-10 Code Match].[ICD9 Code]) Like "010*" Or ([ICD9-10 Code Match].[ICD9 Code]) Like "011*" Or ([ICD9-10 Code Match].[ICD9 Code]) Like "012*" Or ([ICD9-10 Code Match].[ICD9 Code]) Like "013*" Or ([ICD9-10 Code Match].[ICD9 Code]) Like "014*" Or ([ICD9-10 Code Match].[ICD9 Code]) Like "015*" Or ([ICD9-10 Code Match].[ICD9 Code]) Like "016*" Or ([ICD9-10 Code Match].[ICD9 Code]) Like "017*" Or ([ICD9-10 Code Match].[ICD9 Code]) Like "018*" Or ([ICD9-10 Code Match].[ICD9 Code]) Like "042*" Or ([ICD9-10 Code Match].[ICD9 Code]) Like "0100*"));

【问题讨论】:

【参考方案1】:

应该这样做:

SELECT [ICD9-10 Code Match].[ICD9 Code]
FROM [ICD9-10 Code Match]
WHERE [ICD9-10 Code Match].[ICD9 Code] IN
    (Select Left([Code], InStr([Code], ".") - 1) From [ICD9])

【讨论】:

感谢古斯塔夫!我的目标是让任何可能在我之后进来的人都能够理解我所做的事情。虽然我更喜欢你的方法,而且它确实有效!在我做了查找->替换小数点->空白后,我将其解释为以下内容:SELECT [Code List].[Diagnosis Code], [ICD9-10 Code Match].Match FROM [ICD9-10 Code Match ] INNER JOIN [Code List] ON [ICD9-10 Code Match].Match Like [Code List].[Diagnosis Code];对于不熟悉 InStr 公式的人来说,它似乎工作得恰到好处。 我讨厌脑残,而且解决办法就是这么简单!感谢您帮助我克服障碍。

以上是关于访问将通配符值与表进行比较的主要内容,如果未能解决你的问题,请参考以下文章

使用docker申请lets encrypt通配符证书

Firebase 规则通配符和子级比较

用通配符进行过滤

学说2 dql,在进行类似比较时使用带有%通配符的setParameter

MySQL基础之MySQL必知必会用通配符进行过滤

MySQL--用通配符进行过滤(LIKE操作符)