创建显示查询匹配的列

yiytaume  于 2021-07-27  发布在  Java
关注(0)|答案(1)|浏览(244)

我想问一下,是否有人可以就teradata/sql查询提供任何建议。作为我日常工作的一部分,我经常在数据库中运行字符串/文本/批处理搜索,查找字符串/名称的大列表(例如,动物物种a、b、c、d,这些列表一次可以运行700个甚至1100个名称)。我对通过“like any”语句和每个字符串前后的“%”字符来提取和导出数据没有问题。
我遇到的问题是sql/teradata将提供我所需要的,但是我的语句没有突出显示在我使用的列表返回的特定数据行中找到了哪个实体。此外,一些字符串可以在2-3个不同的列中找到,而不仅仅是1列)例如,如果我有700种动物,并且我的语句返回25000个数据点,那么在给定的列中找到匹配的字符串将非常有益,并避免手动创建额外的列和查看中的数据,例如。,擅长。
例如,另一列“为列1找到的名称/实体”将在其中显示,例如,与第2行匹配的是“犬种124”,与第1023行匹配的是“猫种456”,这将证明非常有用。
下面我附上一个示例声明:

SELECT *
        FROM Table_Animal_Species
        WHERE Date BETWEEN '2005' AND '2010'
        AND
        (
    SpeciesColumn1 LIKE ANY ('%cat 123%', '%dog 456%') Or
    SpeciesColumn2 LIKE ANY ('%cat 123%', '%dog 456%') Or
    SpeciesColumn3 LIKE ANY ('%cat 123%', '%dog 456%') Or
          )

提前感谢您的建议!

rm5edbpk

rm5edbpk1#

如果一列只包含一个匹配项,您可以简单地切换到regex而不是like。它也更容易写,名字之间用空格隔开 | ,但您可能会创建该列表,而不是键入:-)

SELECT 
   regexp_substr(SpeciesColumn1, 'cat 123|dog 456', 1, 1, 'i') AS found_in_column_1
  ,regexp_substr(SpeciesColumn2, 'cat 123|dog 456', 1, 1, 'i') AS found_in_column_2
  ,regexp_substr(SpeciesColumn3, 'cat 123|dog 456', 1, 1, 'i') AS found_in_column_2
  ,t.*
FROM Table_Animal_Species AS t
WHERE found_in_column_1 IS NOT NULL
   OR found_in_column_2 IS NOT NULL
   OR found_in_column_3 IS NOT NULL

相关问题