我有一個大型資料庫,如何在這個資料庫列示例中找到識別符號?
在文本列 [bracket ids] 中查找?
SELECT * FROM `explanations` WHERE `id_Verse` REGEXP in '[1007],[991]'
這是一個示例查詢,請為此示例建議一個有效的查詢,選擇 WHERE 文本。
![MySQL:如何在括號 [id] 串列中選擇和查找 id](https://img.uj5u.com/2022/03/25/366af0ed85a445988045465d41d3a68c.jpg)
uj5u.com熱心網友回復:
一種方法是簡化運算式:
\\[(991|1007)\\]
與定義每組括號相反,上面的運算式找到括號[]中等于991或的數字集1007。括號用于對顯式數字集進行分組,同時
用作每個集之間的運算子。
反斜杠 \ 用于轉義括號,因此它們被視為文字而不是正則運算式字符集匹配,例如:匹配字母數字或匹配,或。
在 MySQL 查詢中,您需要使用兩個反斜杠 \ 才能將其表示為文字反斜杠,因為反斜杠通常用作轉義序列字符,例如.()|or[a-zA-Z0-9][bfs]adbadfadsad'Your\'s'
SELECT *
FROM `explanations`
WHERE `id_Verse` REGEXP '\\[(991|1007)\\]';
請參閱作業db<>fiddle示例。
CREATE TABLE foo(
`id` INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
`id_Verse` TEXT
);
INSERT INTO foo(id_Verse)
VALUES
('[991]'), /* <--- */
('[1070]'),
('[991][992][1004][1007]'), /* <--- */
('[991][992][1004][1007][1010]'), /* <--- */
('[1007][1008]'), /* <--- */
('[989][991]'), /* <--- */
('[9910]'),
('[964]'),
('[1007]'); /* <--- */
| id_Verse |
|---|
| [991] |
| [991][992][1004][1007] |
| [991][992][1004][1007][1010] |
| [1007][1008] |
| [989][991] |
| [1007] |
uj5u.com熱心網友回復:
在我看來,這是一個非常奇怪的結構,但是如果您想查找包含 [1007] 或 [991] 的每一行,我可能會使用帶有 % 通配符的 LIKE 運算子。
例子:
SELECT *
FROM `explanations`
WHERE `id_Verse` like '%[991]%' or `id_Verse` like '%[1007]%'
不確定這是否是您正在尋找的東西。 https://www.mysqltutorial.org/mysql-like/
uj5u.com熱心網友回復:
除了LIKE還有多種可能
但更簡單的解決方案是規范化您的表并使用橋接表來存盤 id
CREATE TABLe explanations (id_Verse vARCHAR(100), FULLTEXT idx (id_Verse))
INSERT INTO explanations VALUES ('[1007][991]'),('[991][1008]'),('[1006][1007][1008]'),('[1010]')
使用正則運算式
SELECT * FROM `explanations` WHERE `id_Verse` REGEXP '(\\[991\\]|\\[1007\\])'
| id_Verse | | :----------------- | | [1007][991] | | [991][1008] | | [1006][1007][1008] |
使用全文搜索
SELECT * FROM `explanations` WHERE MATCH(id_Verse) AGAINST('[1007]' '[991]')| id_Verse | | :----------------- | | [1007][991] | | [991][1008] | | [1006][1007][1008] |
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/448898.html
標籤:mysql
