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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

2052閲覧

SQLでの日付の取得方法について

asaka12

総合スコア6

SQL Server

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/04/15 14:53

編集2020/04/15 15:24

前提・実現したいこと

SQLserverで日付の取得。
過去の日付から指定した日付までの日数を月単位で取得したいのですが上手くいきません。

入社日退職日
2019/02/282019/03/29
2019/04/102019/05/10
2019/04/102019/05/11

このような日付のデータがあり、入社日と退職日の差分を取得し、在籍期間を表示させたいのですが上手くいきません。
表記の仕方としては「入社後○ヶ月」ではなく「入社○ヶ月目」という表記にしたいです。
4/10~5/10までは1ヶ月目、4/10~5/11は2か月目、というような表記です。
毎月の日数が当然ながら違うので(1ヶ月28日しかない月もあれば31日ある月もあるため)
純粋に30日で1ヶ月という計算もできず…

入社日退職日在籍期間
2019/02/282019/03/292ヶ月
2019/04/102019/05/101ヶ月
2019/04/102019/05/112ヶ月

このように表示するにはどうすればいいでしょうか。
DATEDIFFを使ってみましたが、自分のやり方が悪いのか以下のような表示になり上手くいきませんでした。

入社日退職日在籍期間
2019/02/282019/03/291ヶ月
2019/04/102019/05/101ヶ月
2019/04/102019/05/111ヶ月

どうか知恵をお貸しいただければと・・・

該当のソースコード

下記のコードを試しましたが思っている動きになりませんでした。

テーブル定義

SQL

1create table shain_date 2( 3 col1 date 4 ,col2 date 5); 6 7insert into shain_date values ('2019-02-28', '2019-02-28'); 8insert into shain_date values ('2019-04-10', '2019-05-10'); 9insert into shain_date values ('2019-04-10', '2019-05-11');

SQL

1select 2 col1 as 入社日 3 ,col2 as 退職日 4 ,convert(varchar(50), datediff(month, col1, col2)) + 'ヶ月' as 在籍期間 5from 6 shain_date; 7

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

SQL server

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

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

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

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

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

m.ts10806

2020/04/15 14:55

テーブル定義をご提示ください。 日本語名で提示しているにも関わらず、SQLでは実名なので整合性がとれません。 提示する形はCREATE TABLE文が望ましいです。
gentaro

2020/04/15 15:17

「思っている動きになりませんでした」ではなく、どういう結果になったか書いてください。
asaka12

2020/04/15 15:25

すみません、サイトを始めて利用するので 基本的に入力する内容を把握し切れておりませんでした。 指摘いただいた点修正いたしました。
guest

回答1

0

ベストアンサー

ちゃんとテストしてませんが、こんなかんじ?

SQL

1select 2 col1 as 入社日 3 ,col2 as 退職日 4 ,convert(varchar, 5 datediff(month, col1, col2) + 6 CASE WHEN DATEPART(day, col2) > DATEPART(day, col1) 7 THEN 1 ELSE 0 END) + 'ヶ月' as 在籍期間 8from 9 shain_date;

txt

1入社日 退職日 在籍期間 22019/2/28 2019/3/29 2ヶ月 32019/4/10 2019/5/10 1ヶ月 42019/4/10 2019/5/11 2ヶ月

投稿2020/04/15 15:33

gentaro

総合スコア8949

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

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

asaka12

2020/04/15 15:49

DATEPARTというものがあったのですね、勉強になりました。 調べたところ、仕組みも理解できました。 ありがとうございます。
gentaro

2020/04/15 17:07

どういたしまして。解決したなら解決済みにしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問