2017-02-20 49 views
-1

我使用DB2和想要的任何比賽知道如何解決這個問題,下面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

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

我得到儘可能

SQL錯誤[42724]錯誤:文本搜索選項未安裝或沒有正確配置..

請告知如何使用查詢或hibernate標準來實現結果。

謝謝。

回答

0

contains只有在正確安裝和配置DB2文本搜索或DB2網絡搜索擴展器並且啓用了數據庫以進行文本搜索(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的包含函數應該可以工作。但是,如果你沒有這種功能,你需要採取另一種方法。例如:

select * FROM user_games 
WHERE GAME_NAME in ('Soccer', 'Tennis' ,'Golf') 
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 

如果你想不僅是包含與 '' 分隔符GAME_NAME:

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) 
0

SELECT * FROM user_games WHERE CONTAINS(GAME_NAME, '足球,網球,高爾夫')= 0

CONTAINS功能是內置可用於DB2 全文搜索搜索功能。

SQL錯誤[42724]:文本搜索選項未安裝或未正確配置..

由於未在此服務器上安裝或未正確配置DB2 Text Search,因此出現錯誤。

請指教如何使用查詢或hibernate標準來實現結果。

確保無論是DB2文本搜索或DB2網絡搜索擴展爲correctly installed and configured和數據庫文本搜索功能。