火鸟搜索并在所有列中找到一个字符串值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了火鸟搜索并在所有列中找到一个字符串值相关的知识,希望对你有一定的参考价值。

我需要查找表中的任何一列是否存在字符串值。能否在Firebird中自动创建过程或查询,在不明确列名的情况下执行这项工作?

列名可以通过这个查询来查找。

select RDB$RELATION_FIELDS.rdb$field_name as NC from RDB$RELATION_FIELDS where RDB$RELATION_FIELDS.rdb$relation_name = MY_Table_name。

我将使用一个类似于火鸟的程序。

http:/www.mssqltips.comsqlservertip1522searching-and-finding-a-string-value-in-all-columns-in-a-sql-server-table

谁能帮帮我?

-- 编辑

SET TERM ^^ ;

CREATE PROCEDURE P_FINDSTRINGINTABLE (
  STRTOFIND VarChar(255), 
  TBLNAME VarChar(255))
 returns (
  SQLCOMMAND VarChar(25000))
AS
DECLARE VARIABLE condSTR VARCHAR(8000);
DECLARE VARIABLE columnName VARCHAR(8000);
begin
  sqlCommand = 'select * from '|| upper( :TBLNAME );

  condSTR = '';
  for select RDB$RELATION_FIELDS.rdb$field_name as NC from RDB$RELATION_FIELDS where RDB$RELATION_FIELDS.rdb$relation_name = upper( :TBLNAME )
  into  :columnName  
  do begin
     condSTR = condSTR||columnName||' LIKE ''%'||STRTOFIND||'%'' OR ';   
  end



  IF ( CHAR_LENGTH(condSTR) > 0 ) THEN 
  begin
     condSTR = ' where ' || left(condSTR, CHAR_LENGTH (condSTR)-3)  || ';';
     sqlCommand = sqlCommand|| condSTR;  
  end
  ELSE sqlCommand = sqlCommand||';' ;


end ^^


SET TERM ; ^^

好的...我已经为我的搜索创建了正确的sql字符串,现在,如果我执行这个Firebird存储过程,它将返回sql命令作为字符串。

有什么方法可以自动执行返回的select吗?

答案

你可以通过使用以下方法来实现你想要的东西 EXECUTE STATEMENT 来创建一个视图,然后返回这些值。

举个例子说明我的意思。

sqlCommand = 'select * from '|| upper( :TBLNAME );

/* Rest of your code for creating the sqlCommand variable */

viewCommand = "RECREATE VIEW V_SEARCH_RESULTS AS " || sqlCommand;

EXECUTE STATEMENT viewCommand;

基本上你的存储过程P_FINDSTRINGINTABLE不会返回任何值,而是(重新)动态地创建一个名为V_SEARCH_RESULTS的视图。然后你所要做的就是在这个视图中进行选择来查看结果。

另一答案

如果你需要在你的数据库中进行全文搜索,我建议你使用与Firebird集成的专用搜索引擎,这是出于性能考虑。这是出于性能的考虑,可以看看SphinxSearch或Solr引擎。

以上是关于火鸟搜索并在所有列中找到一个字符串值的主要内容,如果未能解决你的问题,请参考以下文章

从搜索文档中查找最小片段的算法?

R:如何计算列中用逗号分隔的所有字符值?

搜索一个值,如果存在一个值,添加一行并在谷歌电子表格中复制数据

如何在laravel的json数组列中找到字符串搜索的位置

为列中的值获取长度为 1 或 2 的子字符串并在输出中放入单列?

需要一个查询来从所有表/视图中搜索一个值(“数字”)