MySQL中一个特定列的数据排序问题

3
我有一张表格,其中有一个列名为“mappedcloumnname”和“fieldname”,我的“fieldcolumn”包含“address1”,“address2”,“city”,“state”,“customerid”,“country”等内容,“mappedcolumn”包含“c1-c20”。我编写了一个查询来根据“mappedcolumn”名称对我的数据进行排序,但我得到的顺序是错误的。
SELECT * FROM customermetadata 
   WHERE OrgID = in_orgid 
   ORDER BY MappedColumnName;

选择 * 从 customermetadata 其中 OrgID=in_orgid ORDER BY MappedColumnName ASC 希望这有所帮助。 - Kaushal shah
我也尝试了这个,但是在第一行得到了c1,而在第二行得到了c10,而不是c2。 - mamatha
请参考这个链接:http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html。希望对你有所帮助。 - Kaushal shah
顺便说一下,SELECT 'c2' > 'c10' 是真的。这意味着 c10c2 之前。 - 1000111
你的 mappedcolumn 是否总是包含以 'c' 开头且其余部分为数字的字符串? - 1000111
3个回答

0
如果您的列 MappedColumnName 包含来自 c1-c20 的值,则在 SQL 中它将被视为 String(VarChar),并且数据将无法正确排序。

那么如何对映射的列名进行排序? - mamatha

0

你可以试一试:

SELECT
    *
FROM
    customermetadata
WHERE
    OrgID = in_orgid
ORDER BY CAST(SUBSTRING(MappedColumnName FROM 2) AS UNSIGNED);

注意:

在这里,我从 MappedColumnName 中提取了 number 并根据提取的数字对记录进行排序。

我创建了一个演示,其中表格仅包含两列(idcol)。

col 列包含类似于 c1,c2,... 的值。

查看演示 如果您只按 col 排序。

查看演示 如果您按从 col 中提取的数字排序。


不客气。很高兴猜对了它对你有用。 - 1000111

0

你应该尝试这种方式,

select * from customermetadata 
   where OrgID=in_orgid       
   Order By CAST(SUBSTR(MappedColumnName FROM 2 FOR LENGTH(MappedColumnName)) AS UNSIGNED);   ;

注意:对于相同长度的数字,一个更长的数字也是一个更大的数字,你可以进行文本比较,因为 '0' < '1' .... < '9' ,并且它按短的字母数字顺序排列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接