問題:
行を日付で並べ替えたい。
例1:
exam テーブルには2つの列、subjectがあります およびexam_date 。
| 件名 | ExamDate |
|---|---|
| 数学 | 2019-12-19 |
| 英語 | 2020-01-08 |
| 科学 | 2020-01-05 |
| 健康 | 2020-01-05 |
| アート | NULL |
exam_dateで行を並べ替えたい 。
解決策:
SELECT * FROM Exam ORDER BY ExamDate;
結果は次のようになります(行はExamDateの昇順で並べ替えられます ):
| 件名 | ExamDate |
|---|---|
| アート | NULL |
| 科学 | 2020-01-05 |
| 健康 | 2020-01-05 |
| 英語 | 2020-01-08 |
| 数学 | 2019-12-19 |
ディスカッション:
ORDER BYを使用します キーワードと並べ替える列の名前。このようにして、この列でデータを昇順で並べ替えます。 ASCを使用することもできます 順序が昇順であることを明確にするためのキーワード(最も早い日付が最初に表示され、最も遅い日付が最後に表示されるなど)。
SELECT * FROM Exam ORDER BY ExamDate ASC;
最も遅い日付を最初に表示し、最も早い日付を最後に表示する場合は、降順で並べ替える必要があります。 DESCを使用する この場合のキーワード。
SELECT * FROM Exam ORDER BY ExamDate DESC;
T-SQLでは、NULL sは、昇順で並べ替えるときに最初に表示され、降順で並べ替えるときに最後に表示されます。また、同じExamDateの行 非決定論的な順序で表示されます(Scienceが表示される場合があります) 2番目とHealth 3番目、またはHealth 2番目とScience 3番目)。
例2:
exam テーブルには次の列があります:subject 、exam_year 、exam_month 、およびexam_day 。月は番号ではなく名前で指定されます。
| 件名 | ExamYear | ExamMonth | ExamDay |
|---|---|---|---|
| 数学 | 2019 | 12月 | 19 |
| 英語 | 2020 | 1月 | 8 |
| 科学 | 2020 | 1月 | 5 |
| 健康 | 2020 | 1月 | 5 |
| アート | NULL | NULL | NULL |
試験日で行を並べ替えたい。
解決策:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE);
結果は次のようになります(行はExamYearの昇順で並べ替えられます 、ExamMonth 、およびExamDate ):
| 件名 | ExamYear | ExamMonth | ExamDay |
|---|---|---|---|
| アート | NULL | NULL | NULL |
| 健康 | 2020 | 1月 | 5 |
| 科学 | 2020 | 1月 | 5 |
| 英語 | 2020 | 1月 | 8 |
| 数学 | 2019 | 12月 | 19 |
ディスカッション:
日付でグループ化するには、年、月、および日の値から日付値を作成します。これを行うには、CAST()関数を使用します。 'YYYY-Month-DDに文字列として日付を保存している場合 '形式。CAST(date_string AS date)を使用して日付にキャストできます。 。まず、CAST()関数を使用して文字列を作成する必要があります:
CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2))
式CAST(ExamYear AS VARCHAR(4)) ExamYearに保存されている番号から文字列を作成します 。式CAST(ExamDay AS VARCHAR(2)) ExamDayに保存されている番号から文字列を作成します 。 ExamMonth はすでに文字列であるため、キャストする必要はありません。
次に、CAST(date_string AS date)を使用してこの文字列を日付にキャストする必要があります 機能:
CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE)
ORDER BYで使用します 行を日付の昇順で並べ替える句。行を降順で表示したい場合は、DESCを追加するだけです。 このようなキーワード:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE) DESC;