web-dev-qa-db-ja.com

SQL ORDER BYの日付の問題

この問題の解決にご協力ください。 SQLクエリの結果を日付順に並べようとしていますが、必要な結果が得られません。

私が使用しているクエリは次のとおりです。

SELECT date FROM tbemp ORDER BY date ASC

結果は次のとおりです。

01/02/2009
03/01/2009
04/06/2009
05/03/2009
06/12/2008
07/02/2009

結果は次のようになります。

06/12/2008
03/01/2009
01/02/2009
07/02/2009

上記の形式で日付を選択する必要があります。

あなたの助けは大歓迎です。

39
dnyaneshwar

日付列はdatetime型ではなく、varchar型であるようです。並べ替えるときは、日時に変換する必要があります。

select date
from tbemp
order by convert(datetime, date, 103) ASC

style 103 = dd/MM/yyyy (msdn)

39
manji

あなたの列は日付列ではなく、テキスト列(varchar/nvarcharなど)であるように思えます。文字列ではなく、日付としてデータベースに保存する必要があります。

have何らかの理由で文字列として保存する場合は、ソート可能な形式で保存します。 yyyy/MM/dd。

Najmeddineが示すように、couldアクセスごとに列を変換しますが、それを行わないように非常に努力します。データベースにlotより多くの作業を行わせます-適切なインデックスなどを保持することはできません。可能な限り、データ自体に適したタイプでデータを保存します。

15
Jon Skeet

使用しているdbmsが不明ですが、Microsoft SQLで次のように実行します。

select      [date]
from        tbemp 
order by    cast([date] as datetime) asc
12
Michael A

これは私のために働く:

SELECT datefield FROM myTable ORDER BY CONVERT(DATE, datefield) ASC

6
ghiboz

次の回答はあなたを助けるかもしれません

日付識別子で日付の順序付けを実行しますが、select句でto_char()関数を使用し、日付のselect句で他の識別子を使用します

例えば.

SELECT TO_CHAR(DISPDATE1,'DD/MM/YYYY') AS DISPDATE,
SUM(APPLCOUNT) AS APPLIED,
SUM(CONFCOUNT) AS CONFIRMED
FROM
    (
        SELECT COUNT(ID) AS APPLCOUNT,
                   0 AS CONFCOUNT,
                   STUDENT.APPLIED_ON AS DISPDATE1
            FROM STUDENT
            WHERE STUDENT.ID = P_ID
            GROUP BY STUDENT.APPLIED_ON
        UNION
            SELECT 0 AS APPLCOUNT,
                   COUNT(ID) AS CONFCOUNT,
                   STUDENT.CONFIRMED_ON AS DISPDATE1
            FROM STUDENT
            WHERE STUDENT.ID = P_ID
            GROUP BY STUDENT.CONFIRMED_ON
    )
GROUP BY DISPDATE1
ORDER BY DISPDATE1;
3
Bhushan Sapre

SELECT CONVERT(char(19)、CAST(date AS datetime)、101)as [date]
FROM tbemp ORDER BY convert(datetime、date、101)ASC

3
DiggDev

この作品を使ってみてください

select *  from `table_name` ORDER BY STR_TO_DATE(start_date,"%d-%m-%Y") ASC

ここでstart_dateはフィールド名です

2
khushmeet singh

これは、mysql、phpで役立ちます。

//your date in any format
$date = $this->input->post('txtCouponExpiry');

$day = (int)substr($date, 3, 2);
$month = (int)substr($date, 0, 2);
$year = (int)substr($date, 7, 4);

$unixTimestamp = mktime(0, 0, 0, $year, $day, $month);

// insert it into database
'date'->$unixTimestamp;

//query for selecting  order by date ASC or DESC
select * from table order_by date asc;
1
Jayaprakasha

複数のイベントを子音順で編集したかったので、次のように作成しました。

select 
TO_CHAR(startdate,'YYYYMMDD') dateorder,
TO_CHAR(startdate,'DD/MM/YYYY') startdate,
...
from ...
...
order by dateorder desc

そしてそれは私のために働く。しかし、確かにすべてのケースに適応しているわけではありません...誰かに役立つことを願っています!

1
user3564654

これを試して

Order by Convert(datetime,@date) desc
1
Zainul Abid