带有数字asc的sql顺序字符串

时间:2016-10-12 17:05:23

标签: mysql sql

我的数据库中有这样的字符串:

DE-1016-860
DE-1016-1078
DE-1016-1166

我如何ORDER BY order_numbers SELECT中的DE-1016-1166 DE-1016-1078 DE-1016-860 这样的元素:

function loadCloudStorageFileToBigQuery(source, datasetId, tableId, schema) {  
    try{
        var tableReference = BigQuery.newTableReference();
        tableReference.setProjectId(MY_PROJECT);
        tableReference.setDatasetId(datasetId);
        tableReference.setTableId(tableId);

        var load = BigQuery.newJobConfigurationLoad();
        load.setDestinationTable(tableReference);
        load.setSourceUris([source]);
        load.setSourceFormat('CSV');
        load.setSchema(schema);
        load.setMaxBadRecords(0);
        load.setWriteDisposition('WRITE_TRUNCATE');

        var configuration = BigQuery.newJobConfiguration();
        configuration.setLoad(load);

        var newJob = BigQuery.newJob();
        newJob.setConfiguration(configuration);

        var job = BigQuery.Jobs.insert(newJob, null, {projectId:MY_PROJECT});

    }catch(err){ 
        Logger.log('Table upload error: %s', err);  
    } 
}

感谢您帮助我。

我的解决方案是在这个问题之后!

3 个答案:

答案 0 :(得分:0)

这假定您的前缀始终相同,因此将数字设为最后一个字符:

  SELECT str
    FROM (SELECT 'DE-1016-860' str FROM DUAL
          UNION ALL
          SELECT 'DE-1016-1078' str FROM DUAL
          UNION ALL
          SELECT 'DE-1016-1166' str FROM DUAL)
ORDER BY TO_NUMBER (SUBSTR (str, 9, 4)) DESC

希望这有帮助!

答案 1 :(得分:0)

如果您的格式始终为AA - #### - 。 然后你可以尝试使用LEFT(),RIGHT()和SUBSTRING()。

例如:ORDER BY LEFT(order_number,2), SUBSTRING(order_number,4,4) DESC, SUBSTRING(order_number, 9,4) DESC

希望这有帮助!

答案 2 :(得分:0)

找到解决方案:

ORDER BY SUBSTR(order_number FROM 1 FOR 8), CAST(SUBSTR(order_number FROM 8) AS UNSIGNED)

首先,我给它们起始点的值为1,终点值为8:

12345678
DE-1016-

你可以看到八个字符。其次,我从第八个数字进行演员表,它工作正常。它给出了我的数字,按照最高点到最后的最小值排序。