我正在使用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]:未安装或未正确配置文本搜索选项..
请告知如何使用查询或休眠标准来实现结果。
感谢。
答案 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 ,并且数据库已启用文本搜索。