簡體   English   中英

如何正確排序帶數字的字符串

[英]How to order a string with a number in it properly

我有以下物品:

- Orange Is the New Black, Season 1, Ep. 1 -- I Wasn't Ready
- Orange Is the New Black, Season 1, Ep. 10 -- Bora Bora Bora
- Orange Is the New Black, Season 1, Ep. 2 -- Tit Punch

目前,我正在SELECT title FROM table ORDER BY title執行SELECT title FROM table ORDER BY title

我如何在mysql中正確訂購呢? 也就是說,結果是:

- Orange Is the New Black, Season 1, Ep. 1 -- I Wasn't Ready
- Orange Is the New Black, Season 1, Ep. 2 -- Tit Punch
- Orange Is the New Black, Season 1, Ep. 10 -- Bora Bora Bora

只要title字符串的格式不變,
你可以使用substring_index ,並castorder by條款進行排序。

select * from table
order by
cast(SUBSTRING_INDEX( title, ', Ep. ', -1 ) as decimal);

據我所知,您不能這樣做。 您有2個選項,一個是為標題Ex: name, season, Ep Number,創建單獨的列Ex: name, season, Ep Number,等。。。,另一個是使用拆分功能,但這不是一個好的解決方案。

快速答案是確保將季節和劇集編號填充為零或將商店標題解析為單獨的列。 如果標題格式是固定的,則可以執行一些字符串操作魔術,但是每次查詢數據時都會引起全掃描


現在,如果格式是固定的,並且您可以進行字符串操作,則可以

SELECT title
  FROM table1
 ORDER BY SUBSTRING_INDEX(title, 'Ep. ', 1), 
          1 * SUBSTRING_INDEX(SUBSTRING_INDEX(title, 'Ep.', -1), '--', 1)

假設季節數始終小於10。

輸出:

|                                                         TITLE |
|---------------------------------------------------------------|
| - Orange Is the New Black, Season 1, Ep. 1 -- I Wasn't Ready  |
| - Orange Is the New Black, Season 1, Ep. 2 -- Tit Punch       |
| - Orange Is the New Black, Season 1, Ep. 10 -- Bora Bora Bora |

這是SQLFiddle演示

暫無
暫無

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

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