web-dev-qa-db-ja.com

MySql-日付順、次に時間順

'eventDate'と 'eventHour'の2つの 'datetime'フィールドを持つテーブルがあります。 'eventDate'、次に 'eventHour'で注文しようとしています。

日付ごとにイベントのリストがあります。そのため、日付順に注文し、次に時間順に注文します。

ありがとう!

9
AndreMiranda

あなたの質問に隠された意味があるかどうかはわかりませんが、これを行う標準的な方法は適切であるようです:

... order by eventDate, eventHour

これにより、次のような日付内の時間が得られます。

Feb 15
    09:00
    12:00
    17:00
Feb 23
    22:00
    : :

これらの2つのフィールドが実際にrealdatetimeフィールドである場合、スキーマは台無しになります。日付にはdateフィールドがあり、時間にはtimeまたは整数フィールドが必要です。

could両方を1つのdatetimeフィールドに結合しますが、それらを分離する場合は、selectステートメントで行ごとの関数を実行する非効率性とバランスを取る必要があります。 。フィールドを明確に使用する場合は、通常、フィールドを分離しておくことをお勧めします。

do行ごとの関数を使用する必要がある場合は、次を使用できます。

date(datetime_column)
time(datetime_column)

datetimeおよびdatetimeコンポーネントのみを抽出します。

23
paxdiablo

データを最新のイベント日付として最初にリストしたい場合、同じ日付のレコードが存在する場合、データは時間でソートされます。つまり、最新の時刻が最初です。

以下のように試すことができます

select * from my_table order by eventDate DESC, eventHour DESC
12
Romancha KC

eventDateeventHourの両方がDateTimeである場合、それらを同じフィールドに保存してみませんか?

現在のスキームで必要なものを取得するには、次のようにします。

SELECT * FROM table 
  ORDER BY 
    EXTRACT(YEAR_MONTH FROM eventDate),
    EXTRACT(DAY FROM eventDate),
    EXTRACT(HOUR FROM eventHour)
3
Matt Mitchell

しますか

select * from my_table order by eventDate, eventHour

うまくいかない?

3
Ned Batchelder

リストを使用するだけで、必要な数だけ注文できます。最初の値、次に2番目の値の順に並べられます...など。

  SELECT *
    FROM table
ORDER BY eventDate, eventHour

2つの日時フィールドがある場合は、次のようなものを使用して、日付のみまたは時間のみを取得できます。

    SELECT *
      FROM table
  ORDER BY DATE_FORMAT(eventDate, '%d'), DATE_FORMAT(eventHour, '%h')
1
northpole

IDの降順で並べ替えます。

<?php $sql = "SELECT * FROM posts ORDER BY id DESC?>

これはうまくいくはずです

1
JMD

tIMESTAMPを使用して両方のフィールドを結合しないのはなぜですか?

まず、eventDateフィールドをDATEに変換する必要があります。このために、DATE()関数を使用します。

SELECT DATE( eventDate );

その後、eventHourをTIMEに変換します。次のようになります。

SELECT TIME( eventHour );

次のステップは、この2つの関数をTIMESTAMP関数に結合することです。

SELECT TIMESTAMP( DATE( eventDate ), TIME( eventHour ) );

ええ、でもSELECTは必要ありませんが、ORDER BYは必要なので、完全な例は次のようになります。

SELECT e.*, d.eventDate, t.eventHour
FROM event e
JOIN eventDate d
     ON e.id = d.id
JOIN eventTime t
     ON e.id = t.id
ORDER BY TIMESTAMP( DATE( d.eventDate ), TIME( t.eventHour ) );

これがお役に立てば幸いです。

0

まず、異なるフィールドで日付と時刻を保存することは悪い習慣です。

とにかく、適切な形式で日付/時刻を保存していると仮定します。 (つまり、日付形式はyyyy-mm-ddで、時刻はhh:ssです)

日時の値を取得するには、最初に日付と時刻を連結する必要があります。技術的に言えば、DatetimeフィールドでORDER BYを実行できますが、これを再度行うことはお勧めできません。この場合、CONCATを実行すると、これが文字列に変換されるため、結果セットが正しくなくなります。したがって、注文を行うには、UNIXTIMESTAMPに変換する必要があります。

ORDERby句の前の日時フィールドでUNIX_TIMESTAMPを実行することをお勧めします。

次のクエリを使用できます。

SELECT column1、column2、NIX_TIMESTAMP(CONCAT(event_date、 ''、event_time))as unixtimestamp from table_name order by unixtimestamp desc;

注:(CONCAT関数のevent_dateとevent_timeの間にスペースがあります。ここでは正しく表示されません。)

0
irshad

これは私にとって最善の方法であり、関数to_days(date)で日付を日数に変換し、関数TIME_TO_SEC(time)で時間を秒数に変換するだけです。 =、例:

SELECT 
    nv.destac,
    DATE_FORMAT(nv.date_nov , '%d-%m-%Y %T') as date_order, 
    TO_DAYS(nv.date_nov) as days,
    TIME_TO_SEC(TIME(nv.date_nov)) as seconds

FROM 
    newsviews nv
WHERE 
     nv.active
ORDER BY 
      nv.destac DESC,  days DESC, seconds DESC ;

Esta es la mejorformaquefuncionóparamí、sóloconvertirlafechaalnúmerodedíasconlafunciónTO_DAYS(fecha) y el tiempo a la cantidad de segundos con la funcion TIME_TO_SEC(tiempo )

SELECT 
    nv.destacar,
    DATE_FORMAT(nv.fecha_nov , '%d-%m-%Y %T') as fecha_orden, 
    TO_DAYS(nv.fecha_nov) as dias,
    TIME_TO_SEC(TIME(nv.fecha_nov)) as segundos

FROM 
    novedades nv
WHERE 
     nv.activa
ORDER BY 
      nv.destacar DESC,  dias DESC, segundos DESC ;
0
David ddc