Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要根据单词列表搜索TeradataSQL中的文本字段并返回该单词_Sql_Search_Text_Full Text Search_Teradata - Fatal编程技术网

需要根据单词列表搜索TeradataSQL中的文本字段并返回该单词

需要根据单词列表搜索TeradataSQL中的文本字段并返回该单词,sql,search,text,full-text-search,teradata,Sql,Search,Text,Full Text Search,Teradata,我正在一个大型数据库中搜索长度在5-7个字符之间变化的单词列表。 到目前为止,我已经: Select * from sometable Where upper("Description") like any ("%ABC_123%", "%ABC_124%", "%DE_25%") 我还想返回在查询中找到的单词,但我一直在思考如何在不复制subtr函数中的单词列表的情况下执行此操作 可能有更好的方法可以做到这一点,我希望有一些指导。您是否尝试过位置功能和多个或条件 SELECT * FR

我正在一个大型数据库中搜索长度在5-7个字符之间变化的单词列表。 到目前为止,我已经:

Select *
  from sometable
 Where upper("Description") like any ("%ABC_123%", "%ABC_124%", "%DE_25%")
我还想返回在查询中找到的单词,但我一直在思考如何在不复制subtr函数中的单词列表的情况下执行此操作


可能有更好的方法可以做到这一点,我希望有一些指导。

您是否尝试过
位置
功能和多个
条件

SELECT *
FROM TABLE
WHERE POSITION('ABC_123' IN UPPER("Description") > 0
   OR POSITION('ABC_124' IN UPPER("Description") > 0
   OR POSITION('DE_25' IN UPPER("Description") > 0;
我认为无论哪种方式,Teradata上的CPU/IO进程都将非常昂贵。我不知道Teradata 13.x或更早版本中有哪一个本机函数可以促进这一点。Teradata 14.x(我认为是14.10)应该在本地引入正则表达式支持,这可能使它成为一个更简单的解决方案

你在说多少单字

如果将子查询与
LIKE
谓词一起使用会怎么样

SELECT *
FROM myTable
WHERE UPPER("Description") 
 LIKE (SELECT ListWord
       FROM myListWords);
您可能必须使列表中的单词在子查询中显示为模式:

SELECT *
FROM myTable
WHERE UPPER("Description") 
 LIKE (SELECT '%' || ListWord || '%' AS ListWordPattern
       FROM myListWords);

要查找行,还可以使用REGEXP:

Select *
from sometable
Where Description REGEXP 'ABC_123|ABC_124|DE_25'

我无法理解你的B部分,返回找到的单词,除非该单词是描述字段中唯一的单词。如果它是唯一的单词,您只需返回描述字段的内容。

正如Rob Paller已经提到的,TD14中有正则表达式:

Select sometable.*,
       REGEXP_SUBSTR(Description,'((ABC_)(123|124)|(DE_(25)))') AS match
  from sometable
 Where match <> '';

4年后,但无论如何。。。与LIKE join配合使用效果很好(如果存在多个匹配项,则可进行限定)

e、 g


我猜双引号
“”%ABC\u 124%“
是一个错误,我没有在编辑中更正,以防万一。如果是错误,请编辑并更正。这是我希望避免的。我的字数是218个单词。有利的一面是,列表总是以ABC_uu或DE_u开头,下划线后有2或3个数字。但我需要能够准确返回DE_123或ABC_567。我可以完全跳过列表,使用通配符搜索……但我一直被可变字符数的问题困扰着。这是一个有趣的问题,让我想到了其他方法,这些方法可能会使在基于集合的解决方案中实现这一点更加合理。游标可能是一个简单的解决方法,但要以性能/可伸缩性为代价。添加了关于使用带有LIKE谓词的子查询的更多详细信息。对于REGEX_SUBSTR示例,使用+1。在TD14中,我已经非常喜欢这个功能。
       REGEXP_SUBSTR(Description,'(ABC_|DE_)([0-9]{2,3})') AS match
SELECT a.orig_pattern
,b.my_keyword
FROM table_with_data a
JOIN table_with_keywords b
ON a.orig_pattern LIKE '%'||b.my_keyword||'%'
QUALIFY row_number() OVER (partition by orig_pattern ORDER by orig_pattern) = 1