假设我想按名为STORY_LENGTH
的字段(字符串数据类型)排序记录顺序。该字段是一个多值字段,我使用逗号表示多个值。例如,对于record1,其值为“1”,record2的值为“1,3”,对于record3,其值为“1,2”。现在,当我想根据STORY_LENGTH
订购记录时,记录按此record1 > record3 > record2
排序。很明显,STORY_LENGTH
数据类型是字符串,而order by ASC
正在将该值视为字符串。但是,问题来了。例如,当record4="10"
和record5="2"
和我尝试订购时,它看起来像record4 > record5
,这显然是我不想要的。因为2 > 10
和我使用的字符串格式化只是因为字段的多个值。
所以,任何人,你能帮我解决这个问题吗?我需要一些好主意来修复。
感谢
答案 0 :(得分:5)
您描述的多值字段表示您的数据模型已损坏且应为normalized。
完成此操作后,查询变得更加简单。
答案 1 :(得分:0)
根据我的理解,您希望按存储在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)