我正在構建一個基本的搜索功能,使用LIKE(我會使用全文,但目前不能),我想知道MySQL是否可以,搜索一個關鍵字(例如WHERE字段LIKE'%word%')會返回關鍵字兩邊的20個單詞嗎?從MySQL中的文本字段中選擇X字
1
A
回答
2
可以使用SUBSTRING_INDEX
做這一切在查詢CONCAT_WS(
' ',
-- 20 words before
TRIM(
SUBSTRING_INDEX(
SUBSTRING(field, 1, INSTR(field, 'word') - 1),
' ',
-20
)
),
-- your word
'word',
-- 20 words after
TRIM(
SUBSTRING_INDEX(
SUBSTRING(field, INSTR(field, 'word') + LENGTH('word')),
' ',
20
)
)
)
0
使用INSTR()函數在字符串中查找單詞的位置,然後使用SUBSTRING()函數在位置前後選擇一部分字符。
您必須注意,您的SUBSTRING指令不使用負值,否則會得到奇怪的結果。
試試這個,然後回報。
1
我不認爲它可以限制返回單詞的數量,但是要限制字符的數量退還你可以做類似
SELECT SUBSTRING(field_name, LOCATE('keyword', field_name) - chars_before, total_chars) FROM table_name WHERE field_name LIKE "%keyword%"
- chars_before - 是 字符數你希望 關鍵字
- total_chars之前選擇 - 是要 字符的 總數選擇
即下面的例子將返回數據的關鍵字之前從15個字符盯着的30個字符
SUBSTRING(field_name, LOCATE('keyword', field_name) - 15, 30)
注:如aryeh指出的那樣,在SUBSTRING()任何負值相當壞蛋東西 - 例如,如果所述關鍵字在字段的第一個[chars_before]字符中找到,然後返回字段中最後一個[chars_before]字符的數據字符。
0
我認爲你最好的選擇是通過SQL查詢得到結果,並以編程方式應用一個正則表達式,這將允許你在搜索到的單詞之前和之後檢索一組單詞。
我現在不能測試,但正則表達式應該是這樣的:
.*(\w+)\s*WORD\s*(\w+).*
,你更換WORD
的搜索詞,並使用正則表達式1組爲前字,和2後-words
我以後會測試它時,我可以問我RegexBuddy是否會工作:)我將張貼在這裏
相關問題
- 1. MySQL從標準表中選擇字段
- 2. 從XML字段選擇其中XML字段= X
- 3. Mysql選擇動態文本字段
- 4. JavaScript從選擇字段複製文本到文本字段
- 5. 如何從mySQL選擇的行中選擇一個字段
- 6. 選擇在文本字段中
- 7. 如何僅從文本字段中選擇數字
- 8. 從dbgrid中選擇字段
- 9. 從表中的文本字段中選擇數據 - Javascript - jQuery
- 10. 從dbf文件中選擇字段
- 11. 從CakePHP中關聯表字段名='x'的表中選擇PHP
- 12. 從一個表中選擇所有字段,並從mysql中的另一個表中選擇一個字段
- 13. 從文本字段中獲取值並在選擇字段中顯示
- 14. Mysql選擇字段中的值
- 15. 文本字段中的字頻(MySQL)
- 16. 試圖從mysql字段中顯示30段文字到段落中的文本?
- 17. 如何從不同的表格(字段x)中選擇所有字段?笨
- 18. 從表A中選擇字段,從表B中選擇=表A字段
- 19. 在MySQL中選擇一個雙字字段名稱,從PHP
- 20. 如何在MySQL中選擇字段值
- 21. mysql在多個字段中選擇
- 22. 在mysql問題中選擇字段
- 23. MySQL從CSV中的字段中選擇Python
- 24. 預先選擇字段數組中選擇字段的選項?
- 25. ExtJs 3.4 - 無法在FireFox的文本字段中選擇文本
- 26. 如何選擇monkeyrunner文本字段中的所有文本?
- 27. 在UIAlertController的文本字段中選擇文本
- 28. 部分選擇文本字段中的文本
- 29. 禁用文本字段,直到從選擇列表中選擇選項
- 30. MySQL查詢 - 選擇字段
如果我有一個以上的字做配套?我該怎麼辦? – davidlee 2015-10-31 06:07:05