Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中特定列的数据排序问题_Mysql_Mysql Workbench - Fatal编程技术网

mysql中特定列的数据排序问题

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

我有一个表,其中列名为mappedcloumnname和fieldname,我的fieldcolumn包含
address1
address2
city
state
customerid
country
mappedcolumn
contanis
c1-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进行排序?欢迎您。很高兴猜到它对你有用。