Db2包含查询应该返回结果如果匹配

时间:2017-02-20 03:11:05

标签: db2 hql hibernate-criteria

我正在使用DB2并想知道如何解决以下问题

我有一个表 user_games ,我通过 game_name ,它应该返回 game_id

例如:如果我将 game_name 作为'足球,网球,高尔夫'传递,db2查询应该返回1作为 game_id ,因为game_name匹配网球。

表名: user_games

GAME_ID               GAME_NAME

=======              ========== 

1                    Tennis 

2                    Badminton 

3                   Basketball

我尝试在db2中使用contains

    SELECT * FROM user_games WHERE CONTAINS(GAME_NAME,'Soccer, Tennis, Golf') = 0

我收到错误

SQL错误[42724]:未安装或未正确配置文本搜索选项..

请告知如何使用查询或休眠标准来实现结果。

感谢。

3 个答案:

答案 0 :(得分:0)

contains仅在正确安装和配置DB2 Text Search或DB2 Net Search Extender且数据库已启用文本搜索(Enabling Text Search)时才起作用。尝试使用以下命令启动文本搜索并启用数据库:

db2ts start for text
db2ts enable database for text connect to mydb
db2ts "create index game_name for text on user_games(game_name) connect to mydb"
db2ts "update index user_games for text connect to mydb"

现在game_name的contains函数应该可以工作。但是,如果您没有这种功能,则需要采用其他方法。例如:

select * FROM user_games 
WHERE GAME_NAME in ( 'Soccer', 'Tennis' ,'Golf' )

答案 1 :(得分:0)

如果只想包含到game_name:

SELECT * FROM user_games 
WHERE 'Soccer, Tennis, Golf' like '%' || GAME_NAME || '%'

或者像这样:

SELECT * FROM user_games 
WHERE position (GAME_NAME IN 'Soccer, Tennis, Golf')>0

如果你想只包含带有','分隔符的游戏名称:

SELECT * FROM user_games 
WHERE 
'Soccer, Tennis, Golf' like trim(GAME_NAME) || ',%' or
'Soccer, Tennis, Golf' like '%, ' || trim(GAME_NAME) || ',%' or
'Soccer, Tennis, Golf' like '%, ' || trim(GAME_NAME)

答案 2 :(得分:0)

  

SELECT * FROM user_games WHERE CONTAINS(GAME_NAME,'Soccer,Tennis,Golf')= 0

CONTAINS 函数是内置的搜索功能,可用于DB2中的全文搜索

  

SQL错误[42724]:未安装或未正确配置文本搜索选项..

您收到错误,因为未在此服务器上安装或未正确配置DB2 Text Search。

  

请告知如何使用查询或休眠标准来实现结果。

确保DB2 Text Search或DB2 Net Search Extender correctly installed and configured ,并且数据库已启用文本搜索。