mysql中特定列的数据排序问题
我有一个表,其中列名为mappedcloumnname和fieldname,我的fieldcolumn包含mysql中特定列的数据排序问题,mysql,mysql-workbench,Mysql,Mysql Workbench,我有一个表,其中列名为mappedcloumnname和fieldname,我的fieldcolumn包含address1,address2,city,state,customerid,country和mappedcolumncontanisc1-c20>。我编写了一个查询,根据mappedcolumnname对数据进行排序,但得到的顺序是错误的 SELECT * FROM customermetadata WHERE OrgID = in_orgid ORDER BY Mapp
address1
,address2
,city
,state
,customerid
,country
和mappedcolumn
contanisc1-c20>。我编写了一个查询,根据mappedcolumn
name对数据进行排序,但得到的顺序是错误的
SELECT * FROM customermetadata
WHERE OrgID = in_orgid
ORDER BY MappedColumnName;
如果您的列MappedColumnName
包含来自c1-c20
的值,则在SQL中将其视为String(VarChar)
,数据将无法正确排序。您可以尝试一下:
SELECT
*
FROM
customermetadata
WHERE
OrgID = in_orgid
ORDER BY CAST(SUBSTRING(MappedColumnName FROM 2) AS UNSIGNED);
注意:
这里,我从MappedColumnName
中提取了number
,并根据提取的数字对记录进行排序
我创建了一个演示,其中表只包含两列(id
和col
)
col
列包含类似于c1、c2、…
的值
如果您仅按col
订购
如果您通过从col
中提取数字进行订购,则应尝试以下方法:
select * from customermetadata
where OrgID=in_orgid
Order By CAST(SUBSTR(MappedColumnName FROM 2 FOR LENGTH(MappedColumnName)) AS UNSIGNED); ;
注意:对于相同长度的数字,较长的数字也是较大的数字,您可以进行文本比较,因为'0'<'1'..<'9'
它将缩短字母数字顺序。从customermetadata中选择*其中OrgID=in_OrgID OrgID order BY MappedColumnName ASC希望此帮助我也尝试过,我在第一行获得c1,然后在第二行获得c10。请参阅此希望此帮助顺便说一句,选择“c2”>“c10”
是真的。这意味着c10
在c2
之前。您的mappedcolumn
是否总是包含以“c”开头的字符串,而该字符串的其余部分是数字?那么如何对MappedColumnName进行排序?欢迎您。很高兴猜到它对你有用。