假設我想通過稱爲STORY_LENGTH
的字段(字符串數據類型)對記錄順序進行排序。該字段是一個多值字段,我用逗號表示多個值。例如,對於記錄1,其值爲「1」,記錄2的值爲「1,3」,對於記錄3,其值爲「1,2」。現在,當我想訂購根據STORY_LENGTH
的記錄時,則記錄的排列方式如下record1 > record3 > record2
。其明確指出STORY_LENGTH
數據類型是字符串,order by ASC
將該值視爲字符串排序。但是,問題來了。例如,當record4="10"
和record5="2"
,我嘗試訂購它看起來像record4 > record5
,這顯然我不想。因爲2 > 10
和我正在使用字符串格式,只是因爲字段的多個值。所以,任何人,你能幫我解決這個問題嗎?我需要一些好主意來解決。 謝謝如何按字母順序處理字符串排序?
回答
您所描述的多值字段意味着您的數據模型已損壞,應爲normalized。
一旦完成,查詢變得更加簡單。
該字段將包含幾個相同類型的值。例如一首歌曲將有兩種長度:10,15或單一的10.目前在這種情況下,數據庫設計不能改變.. – 2010-12-19 19:03:20
@穆蘇拉赫曼 - 這是不幸的。您可能想使用LIKE運算符來查看解決方案,並在應用程序中執行字符串處理和篩選,而不是使用數據庫。 – Oded 2010-12-19 19:05:19
從我所瞭解的你想要排序的項目由第二或第一個數字在逗號分隔值存儲在一個VARCHAR字段。實施將取決於數據庫的使用,例如在MySQL它會是什麼樣子:
SELECT * FROM stories
ORDER BY CAST(COALESCE(SUBSTRING_INDEX(story_length, ',', -1), '0') AS INTEGER)
然而,這不是一般的不好用這樣的排序性能方面的原因如排序將需要全表掃描,而不是使用指數領域。
編輯:編輯後,它看起來像你想排序第一個值,忽略逗號後的值。正如根據上面的評論,數據庫設計的變化不是一種選擇,只是使用以下代碼進行分類:
SELECT * FROM stories
ORDER BY CAST(COALESCE(NULLIF(SUBSTRING_INDEX(story_length, ',', 1), ''), '0') AS INTEGER)
謝謝。看上去不錯。我會盡力並提供反饋 – 2010-12-20 06:23:16
- 1. 按字母順序排序字符串
- 2. 排序字符串按字母順序
- 3. 如何按字母順序排序字符串的字符?
- 4. 如何將NSMutableArray中的字符串按字母順序排序?
- 5. 如何按字符串的長度和字母順序排序?
- 6. 如何按字母順序排序字符串java
- 7. 如何按字母順序排序字符串中的單詞
- 8. 如何在F#中按字母順序排序字符串?
- 9. 按字母順序排序,然後按字母順序排列
- 10. C#排序Arraylist字符串按字母順序排列
- 11. 按字母順序排序
- 12. 按字母順序排序
- 13. 按字母順序排序
- 14. 按字母順序排序
- 15. 排序按字母順序
- 16. 按字母順序排序
- 17. 按字母順序排序
- 18. 按字母順序排列字符串中的字母 - SAS
- 19. 如何按字母順序排列字符串ArrayList?
- 20. 如何按字母順序排序NSMutableOrderedSet?
- 21. 按選擇排序按字母順序排序字符串數組?
- 22. 按字母順序重新排序字符串變量
- 23. 使用Javascript按字母順序排序字符串
- 24. MySQL函數按字母順序排序字符串
- 25. 字符串進行排序按字母順序算法的c#
- 26. 在Java中對字符串數組按字母順序排序
- 27. Java,按字母順序排序字符串,不帶數組
- 28. 替代strcmp()的,按字母順序排序字符串
- 29. Visual Basic字符串數組按字母順序排序
- 30. 在scala中按字母順序排序字符串數組
修復您的設計。簡單。 – gbn 2010-12-19 20:43:51