按varchar列排序

时间:2016-01-20 09:35:50

标签: sql sql-server sorting sql-server-2014 varchar

在ms sql数据库表files_master中我有一个名为'AstNum' 1/1980 2/1980 11/1980 的列,它包含如下数据:SELECT AstNum FROM Files_master ORDER BY AstNum ASC 等等,当我对列进行排序时:

1/1980,11/1980

它向我显示了列中的记录/1980 1/1980 2/1980 3/1980是斜线是增量数的前一年请帮我如何在结果using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace OOP2 { public partial class FleteDalja : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void enter_Click(object sender, EventArgs e) { Response.Redirect("Home.aspx"); } } } <asp:Button ID="enter" runat="server" onclick="enter_Click" Text="Enter" />

中对我想要的记录进行排序

3 个答案:

答案 0 :(得分:3)

试试这个

function m(e) {
    if (o) {
        n = Math.round(e.children(".search-item").length / r)
    } else {
        var mod_1 = Math.round(e.children("tr").length % r)
        n = Math.round(e.children("tr").length / r);
        if (mod_1 != 0)
        {
            n += 1;
        }
    } if (n == 0) {
        n = 1
    }

编辑:根据评论,这是另一种解决方案

Select AstNum from Files_master Order by convert(datetime,'1/'+AstNum,101) ASC 

答案 1 :(得分:2)

这很容易就行不通,也可能违反了standard database rules

你的方法是拥有两个类型int的列,其中一列是索引,另一列是年份。比如说,您有idyear列,您的请求将是

   SELECT `id`, `year` FROM Files_master ORDER BY `id` ASC, `year` ASC

请注意,列出ORDER BY语句中列的顺序取决于主要和次要订单列,因此您可能首先要按年订购。

如果你真的,真的,必须使用这种格式,只有这样,你才可能找到一种方法来使用SUBSTRING_INDEX分割你的字符串,然后有类似的东西(未测试的):

    SELECT SUBSTRING_INDEX(`AstNum`, '/', 1) AS `id`, 
           SUBSTRING_INDEX(`AstNum`, '/', -1) AS `year` 
    ORDER BY `id` ASC,`year` ASC

请注意,评估可能会非常缓慢。

编辑:回复评论,因为事实证明使用的是SQL Server而不是MySQL(我在撰写本文时假设的),命令必须略有不同,更复杂(仍未测试,偏移可能是.. off):

    SELECT SUBSTRING(AstNum, 1, LEN(AstNum)-5) AS id, 
           SUBSTRING(AstNum, LEN(AstNum)-3, 4) AS year 
    ORDER BY id ASC, year ASC

答案 2 :(得分:0)

如果您需要先按年份排序 -

SELECT AstNum
FROM Files_master
ORDER BY Cast(substring(AstNum, 1, charindex('/', AstNum)-1) as int) ASC

如果您只需要按数字增量排序,那么 -

LEFT JOIN