🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

5回答

3292閲覧

文字列の日付"OOOO/OO"を日付順にソートしたい

ponpon123

総合スコア9

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2021/01/20 08:00

前提・実現したいこと

C#でPostgreSQLの操作を行っており、題のようなことをしたかったのですが、調べても分からず質問させていただきました。

日付を文字列でDBに保存し、取り出すときに日付順に取り出したいです。data型にすればよかったのかもしれませんが、作ってきたプログラムの変更をするのが大変なため、出来れば現在保存している形(文字列)の状態のままソートができる方法が無いか教えていただきたいです。

発生している問題

ODER BY 日付 ASC; ソート前 2020/4 2020/5 2020/12 2020/6 ↓ソート後 2020/12 2020/4 2020/5 2020/6

試したこと

cast(日付 as date);
でもしかしたらできるのか…?と思ったのですが無理でした…

C#でソートするという方法もあるとは思いますが、このソートできないということに気づかずプログラムがほとんど完成しているため、出来ればSQL文でソートして、ソートできたものを取り出したいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2021/01/20 08:25

テーブル設計で最初から日付型を使えると不幸度が少しさがります。
guest

回答5

0

日付という項目名なのに書式は'yyyy/m'なのですね。
年月しかないなら、dateにはcastできません。
取り敢えず、1日固定にすればcastはできます。

SQL

1select cast(日付 || '/1' as date) 2-- castは簡易的に以下の様な記述もできます。 3select (日付 || '/1') ::date

投稿2021/01/20 08:40

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ponpon123

2021/01/20 08:50

今回のシステムでは年月しか使ってなかったです。 日付もなければcast出来ないのですね…勉強になりました。ありがとうございます。
guest

0

自己解決

select * from table order by TO_DATE(日付,'YYYY/MM');

と書くことで日付順に取り出すごとが出来ました。

投稿2021/01/20 08:37

編集2021/01/20 08:40
ponpon123

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ORDER BY RIGHT( CONCAT( '00', SUBSTRING(<日付>, 6 , 2) ) , 2 )

投稿2021/01/20 08:34

haihaikazuma

総合スコア181

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

date型にcastしてselectするviewを作成し、そちらにorder byをかけてみたらどうでしょう。

投稿2021/01/20 08:31

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

この場合、素直に文字列でソートすればいいんではないかと。

投稿2021/01/20 08:10

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ponpon123

2021/01/20 08:13

文字列でソートした場合質問文のように4月と12月だと12月の方が上に上がってきちゃいませんか?
y_waiwai

2021/01/20 08:17

ああ、そうでしたね。 失礼しました C#で、ってならDate型に変換してソートってのはかんたんですが。
ponpon123

2021/01/20 08:18

やっぱりSQL文でソートするってのは厳しそうですかね・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問