質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.31%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

2回答

2177閲覧

SELECT文で取得したDateTime型の値の日付だけを抽出して上旬、中旬、下旬か調べる方法 ・月だけ抽出する方法が知りたい

milkwalking

総合スコア60

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2019/06/18 03:33

前提・実現したいこと

現在Datetimeのデータが格納された
配送日テーブルの出荷日の列があります。

この出荷日の日付の部分だけで条件をつけて出力したいです。
例えば 6/110の場合、6月上旬と表記、6/1120の場合、6月中旬と表記、6/21~30の場合、6月上旬と表記
というような形です。

大体のSQLのイメージは下記のような形です、、、

SQL

1SELECT 2CASE WHEN 出荷日 == 1-10の日付かどうか THEN 今の月だけ抽出+'月上旬' 3   WHEN 出荷日 == 11-20の日付かどうか THEN 今の月だけ抽出+'月中旬' 4   WHEN 出荷日 == 21-最後の日付かどうか THEN 今の月だけ抽出+'月下旬' 5   ELSE '' 6FROM 配送日テーブル

というイメージです。

・出荷日の日付だけを抽出して上旬、中旬、下旬か調べる方法
・今の月だけ抽出する方法

が知りたいです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

言語はC#
SQLサーバー
Microsoft SQL Server 2014 - 12.0.2269.0 (X64)
Express Edition (64-bit) on Windows NT 6.3 <X64> (Build 17763: )
という環境です。

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

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

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

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

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

guest

回答2

0

ベストアンサー

DATEPART()で書式を指定すれば、月のみや日付のみの取り出しができます。

SQL

1SELECT 2 FORMAT(出荷日, 'MM月') + 3 CASE 4 WHEN DatePart(day, 出荷日)=>1 AND DatePart(day, 出荷日)=<10 THEN '上旬' 5 WHEN DatePart(day, 出荷日)=>11 AND DatePart(day, 出荷日)=<20 THEN '中旬' 6 WHEN DatePart(day, 出荷日)=>21 THEN '下旬' 7  ELSE '' 8 END 9FROM 配送日テーブル

投稿2019/06/18 03:56

編集2019/06/18 06:35
sazi

総合スコア25430

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

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

milkwalking

2019/06/18 05:27 編集

具体的で丁寧なご回答ありがとうございます。自分が考えていた下記の内容よりスマートです、、、 @dはdatetime DATENAME(dd, @d ) DAY(@d) FORMAT(@d,'dd')
sazi

2019/06/18 06:14

datepartが返却するのは数値であった事と、datepart()の引数位置を間違えていたので訂正しました。
milkwalking

2019/06/18 06:21

ご訂正ありがとうございます。 SELECT FORMAT(出荷日, 'MM月') + CASE WHEN FORMAT(出荷日,'dd')=>'1' AND FORMAT(出荷日,'dd') THEN '上旬' WHEN FORMAT(出荷日,'dd')=>'11' AND FORMAT(出荷日,'dd') =<'20' THEN '中旬' WHEN FORMAT(出荷日,'dd') =>'21' THEN '下旬'   ELSE '' END FROM 配送日テーブル では不正解でしょうか? 文字列は比較できないんでしょうか。
sazi

2019/06/18 06:25

いえ、FORMAT()なら文字列を返却しますから文字列の比較でいいんですけど、書式が'dd'の場合は2桁で返却されますから「=>'01'」でないと駄目ですね。
milkwalking

2019/06/18 06:30 編集

WHEN DatePart('dd', 出荷日)=>1 AND DatePart('dd', 出荷日)=<10 THEN '上旬' この'dd'の部分ddで''は必要ないのかな?と思うんですがいかがでしょうか。 ''をつけるとエラーになってしまうんです。。。。。
milkwalking

2019/06/18 06:29

sazi様 いえ、FORMAT()なら文字列を返却しますから文字列の比較でいいんですけど、書式が'dd'の場合は2桁で返却されますから「=>'01'」でないと駄目ですね。 ありがとうございます。文字列の比較の場合、比較の前に数値に変換が必要な認識なので、できれば記載いただいた方法で行いたいです。;;
sazi

2019/06/18 06:35 編集

>この'dd'の部分ddで''は必要ないのかな?と思うんですがいかがでしょうか。 そうでしたね。formatとごっちゃになってました。 ddやdなどの省略形よりdayとした方が可読性は良さそうですね。 ※訂正しました。
milkwalking

2019/06/18 06:45

ありがとうございます。^^
guest

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

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

milkwalking

2019/06/18 05:04

ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問