0

你好我有一个问题我想通过按天排序来显示日期到现在生日第一次出现,例如:我有

15/08/2013 00:00:00
15/08/2013 00:00:00
29/08/2012 00:00:00
23/08/2012 00:00:00
16/08/2012 00:00:00
10/08/2012 00:00:00

我希望它是

10/08/2012 00:00:00
15/08/2013 00:00:00
15/08/2013 00:00:00
16/08/2012 00:00:00
23/08/2012 00:00:00
29/08/2012 00:00:00

我写:

public DataTable BirtdayReport(DateTime d)
{
    try
    {

        string query = "SELECT C.Class_Name as [כיתה], P.Person_First_Name as [שם פרטי], P.Person_Last_Name as [שם משפחה], P.Date_Of_Birth AS [תאריך לידה] ";
        query += "FROM Person as P INNER JOIN Customer as C ON P.[Person _ID] = C.Person_ID WHERE MONTH(P.Date_Of_Birth)=Month(@d) ORDER BY (DAYOFMONTH(Person.Date_Of_Birth)) ;";

        OleDbCommand command = new OleDbCommand();
        command.CommandText = query;
        command.Parameters.AddWithValue("@d", d);
        DataTable dt = AdoHelper.ExecuteDataTable(command);
        return dt;

    }
    catch (Exception ex)
    {
        throw ex;
    }
}

但它不像我想要的那样排序。你能帮助我吗?

4

2 回答 2

0

这是基于标准 SQL 的,但应该很容易根据您的 SQL 方言对其进行修改:

ORDER BY 
   CASE WHEN EXTRACT(MONTH FROM Date_Of_Birth) > EXTRACT(MONTH FROM CURRENT_DATE) 
         OR (EXTRACT(MONTH FROM Date_Of_Birth) = EXTRACT(MONTH FROM CURRENT_DATE) AND 
             EXTRACT(  DAY FROM Date_Of_Birth)>= EXTRACT(DAY   FROM CURRENT_DATE))
        THEN 0 
        ELSE 1
   END,
   EXTRACT(MONTH FROM Date_Of_Birth), EXTRACT(DAY FROM Date_Of_Birth)
于 2013-08-17T15:22:21.470 回答
0
select 
    col1, col2, col3, col4
from
(
SELECT 
    C.Class_Name as col1, 
    P.Person_First_Name as col2, 
    P.Person_Last_Name as col3, 
    P.Date_Of_Birth AS col4,
    DAYOFMONTH(Person.Date_Of_Birth) as ordCol
FROM 
    Person as P INNER JOIN 
    Customer as C 
        ON P.[Person _ID] = C.Person_ID 
WHERE 
    MONTH(P.Date_Of_Birth)=Month(@d) 
) tbl
ORDER BY tbl.ordCol
于 2013-08-17T14:45:49.927 回答