如何从Oracle表中获取几乎匹配的字符串?

莎拉·萨拉特

我在Oracle中有一个包含四列的表。 Oracle中的表数据。

现在,用户可以向我的查询输入输入字符串作为“向右膝盖操作”(有效),并且我的查询应返回与DiagnosisName列中的大多数单词匹配的ICD代码(IKR123)。

以下是我当前的查询。(未提供正确的输出)

SELECT diagnosisname
FROM
  (SELECT diagnosisname,
    UTL_MATCH.jaro_winkler_similarity('%operation Knee right%',diagnosisname)
  FROM icd_code
  ORDER BY UTL_MATCH.EDIT_DISTANCE_SIMILARITY('%operation Knee right%',diagnosisname) DESC
  )
WHERE ROWNUM<2;

该查询给我的输出为“左膝操作”,但我的期望是“右膝操作”。

Lalit Kumar B

关于您使用UTL_MATCH的注意事项

  • EDIT_DISTANCE_SIMILARITY:返回0到100之间的整数,其中0表示完全没有相似性,而100表示​​完美匹配。
  • JARO_WINKLER_SIMILARITY:返回0到100之间的整数,其中0表示完全没有相似性,而100表示​​完美匹配,但尝试考虑可能的数据输入错误。

ORDER BY UTL_MATCH.EDIT_DISTANCE_SIMILARITY('%operation Knee right%',diagnosisname)DESC

这不会给您正确的结果。因为,您仅考虑可能的相似性,但是没有考虑数据输入错误。因此,您必须使用JARO_WINKLER_SIMILARITY

右膝手术

您需要牢记输入CASE和要比较的列值。为了正确匹配,它们必须处于类似情况。您正在LOWERCASE中传递输入,但是,列值在INITCAP中最好将列值和输入都转换为相似的情况。

让我们看下面的演示以了解:

SQL> WITH DATA AS(
  2  SELECT 'Heart Operation' diagnosis_name, 'IH123' icd_code FROM dual UNION ALL
  3  SELECT 'Knee Operation' diagnosis_name, 'IK123' icd_code FROM dual UNION ALL
  4  SELECT 'Left Knee Operation' diagnosis_name, 'IKL123' icd_code FROM dual UNION ALL
  5  SELECT 'Right Knee Operation' diagnosis_name, 'IKR123' icd_code FROM dual UNION ALL
  6  SELECT 'Fever' diagnosis_name, 'IF123' icd_code FROM dual
  7  )
  8  SELECT t.*,
  9    utl_match.edit_distance_similarity(upper(diagnosis_name),upper('operation Knee right')) eds,
 10    UTL_MATCH.jaro_winkler_similarity (upper(diagnosis_name),upper('operation Knee right')) jws
 11  FROM DATA t
 12  ORDER BY jws DESC
 13  /

DIAGNOSIS_NAME       ICD_CO        EDS        JWS
-------------------- ------ ---------- ----------
Right Knee Operation IKR123         20         72
Knee Operation       IK123          20         70
Heart Operation      IH123          25         68
Left Knee Operation  IKL123         25         64
Fever                IF123          15         47

SQL>

因此,您将看到两者之间的差异。jaro_winkler_similarity在识别数据输入错误并提供最接近的匹配方面做得更好基于此,只需按降序对第一行进行排序即可:

SQL> WITH DATA AS(
  2  SELECT 'Heart Operation' diagnosis_name, 'IH123' icd_code FROM dual UNION ALL
  3  SELECT 'Knee Operation' diagnosis_name, 'IK123' icd_code FROM dual UNION ALL
  4  SELECT 'Left Knee Operation' diagnosis_name, 'IKL123' icd_code FROM dual UNION ALL
  5  SELECT 'Right Knee Operation' diagnosis_name, 'IKR123' icd_code FROM dual UNION ALL
  6  SELECT 'Fever' diagnosis_name, 'IF123' icd_code FROM dual
  7  )
  8  SELECT diagnosis_name
  9  FROM
 10    (SELECT t.*,
 11      utl_match.edit_distance_similarity(upper(diagnosis_name),upper('operation Knee right')) eds,
 12      UTL_MATCH.jaro_winkler_similarity (upper(diagnosis_name),upper('operation Knee right')) jws
 13    FROM DATA t
 14    ORDER BY jws DESC
 15    )
 16  WHERE rownum = 1
 17  /

DIAGNOSIS_NAME
--------------------
Right Knee Operation

SQL>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从匹配中只获取完全匹配的字符串

来自分类Dev

Oracle:如何从包含字符串范围的列的表中获取结果

来自分类Dev

如何通过匹配键从字符串中获取值?

来自分类Dev

获取几乎相同的字符串名称

来自分类Dev

如何在Oracle中获取URL友好的字符串?

来自分类Dev

如何在Oracle中获取部分字符串

来自分类Dev

如何在Oracle中获取子字符串索引

来自分类Dev

如何获取红宝石中多个字符串的精确字符串匹配

来自分类Dev

Bash:如何获取字符串中匹配项的完整子字符串?

来自分类Dev

获取变量中的匹配字符串

来自分类Dev

搜索数据库中字符串匹配的所有表并获取表结构

来自分类Dev

Oracle从多个数据库表中查找字符串匹配

来自分类Dev

如何匹配字符串中的日期

来自分类Dev

如何匹配文件中的字符串

来自分类Dev

获取匹配的字符串?

来自分类Dev

如何获取两个字符串中不匹配字符的计数?

来自分类Dev

如何在PostgreSQL中的字符串中获取正则表达式匹配的位置?

来自分类Dev

如何从JAVA中的两个集合中获取不匹配的字符串?

来自分类Dev

如何在PostgreSQL中的字符串中获取正则表达式匹配的位置?

来自分类Dev

谷歌表,如果字符串匹配,并且是单元格集合中的最后一个匹配字符串,则获取单元格嵌套的值

来自分类Dev

如何在正则表达式中获取字符串并在匹配字符串后删除其他字符串

来自分类Dev

从字符串列表中查找几乎匹配的词组

来自分类Dev

如何从表中查询字符串

来自分类Dev

如何显示与数据块中某些字符串匹配的表

来自分类Dev

SQL - 在供应商表的字符串中查找值并将该值与客户表匹配以获取帐号

来自分类Dev

如何从 C# 中的 DbContext 获取任何表名作为字符串的表的 DbSet 对象

来自分类Dev

如何从字符串中获取数值?

来自分类Dev

如何从字符串中获取类型?

来自分类Dev

如何从字符串中获取数字

Related 相关文章

  1. 1

    如何从匹配中只获取完全匹配的字符串

  2. 2

    Oracle:如何从包含字符串范围的列的表中获取结果

  3. 3

    如何通过匹配键从字符串中获取值?

  4. 4

    获取几乎相同的字符串名称

  5. 5

    如何在Oracle中获取URL友好的字符串?

  6. 6

    如何在Oracle中获取部分字符串

  7. 7

    如何在Oracle中获取子字符串索引

  8. 8

    如何获取红宝石中多个字符串的精确字符串匹配

  9. 9

    Bash:如何获取字符串中匹配项的完整子字符串?

  10. 10

    获取变量中的匹配字符串

  11. 11

    搜索数据库中字符串匹配的所有表并获取表结构

  12. 12

    Oracle从多个数据库表中查找字符串匹配

  13. 13

    如何匹配字符串中的日期

  14. 14

    如何匹配文件中的字符串

  15. 15

    获取匹配的字符串?

  16. 16

    如何获取两个字符串中不匹配字符的计数?

  17. 17

    如何在PostgreSQL中的字符串中获取正则表达式匹配的位置?

  18. 18

    如何从JAVA中的两个集合中获取不匹配的字符串?

  19. 19

    如何在PostgreSQL中的字符串中获取正则表达式匹配的位置?

  20. 20

    谷歌表,如果字符串匹配,并且是单元格集合中的最后一个匹配字符串,则获取单元格嵌套的值

  21. 21

    如何在正则表达式中获取字符串并在匹配字符串后删除其他字符串

  22. 22

    从字符串列表中查找几乎匹配的词组

  23. 23

    如何从表中查询字符串

  24. 24

    如何显示与数据块中某些字符串匹配的表

  25. 25

    SQL - 在供应商表的字符串中查找值并将该值与客户表匹配以获取帐号

  26. 26

    如何从 C# 中的 DbContext 获取任何表名作为字符串的表的 DbSet 对象

  27. 27

    如何从字符串中获取数值?

  28. 28

    如何从字符串中获取类型?

  29. 29

    如何从字符串中获取数字

热门标签

归档