簡體   English   中英

MySQL中的索引是否有FIND_IN_SET?

[英]Is there a FIND_IN_SET by index in MySQL?

我知道將列表存儲為字符串並不明智,但我必須處理它以導出一些存儲的數據。 我也知道FIND_IN_SET函數,它返回列表中某個字符串的索引:

SELECT FIND_IN_SET('bar', 'foo,bar,baz');
-- selects 2

是否有任何內置函數(或函數組合)來獲取列表的特定索引中的字符串? 我在尋找這樣的東西:

SELECT IN_SET_AT_INDEX(2, 'foo,bar,baz');
-- selects 'bar'

我想避免像分裂一樣的函數,如果可能的話,使列表成為一個單獨的表。

SUBSTRING_INDEX()可以做到這一點,有點:

mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('foo,bar,baz', ',', 2), ',', -1) AS middle_one;
+------------+
| middle_one |
+------------+
| bar        |
+------------+

是的,但它需要一點點詭計。 基礎是substring_index() ,但是它可以獲得第n個條目的所有內容。 然后我使用reverse()兩次和另一個substring_index()

select reverse(substring_index(reverse(substring_index('foo,bar,baz', ',', 2)), ',', 1))

在您的情況下,轉換是:

original string:                'foo,bar,baz'
after substring_index(..., 2)   'foo,bar'
after inner reverse             'rab,oof'
after substring_index(..., 1)   'rab'
after outer reverse             'bar'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM