• ベストアンサー

SQL Server で 翌月10日を取得する

SQL Server で 翌月10日を取得する方法を教えてください。 isnull(convert(char(10),dateadd(month,1,(dateadd(day,9,DATE))),111),'') as DATE ↑これだと、DATE(月末)の翌月の9日後で、翌月10日も可能なのですが、 当然ながら、DATEが月末とは限らないので。。。 常に10日を固定で表示するにはどうしたら、よいのでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • innoya
  • ベストアンサー率71% (10/14)
回答No.2

こんにちは。 イノ(inno)です。 翌月10日を取得する時は下記のようにします。 DECLARE @Today DATETIME SET @Today = GETDATE() SELECT CONVERT(CHAR(7),DATEADD(MM,1,@Today), 111) + '/10' これが一番簡単です。 @TodayにDATEADD(MM,1,@Today)をして翌月に移動します。 CONVERTを利用して'yyyy/MM/dd'形式に変換して前から7文字を切り取ります。 その後に'/10'をつけて'yyyy/MM/dd'に変更します。 上記の方法はSQL SERVERの全バージョンから使えます。 SQL SERVER 2012ならば「EOMONTH」を使って下記のように記述して取得することができます。 SELECT DATEADD(day, 10, EOMONTH(GETDATE())) 「EOMONTH」はSQL SERVER 2012以上から使えます。

idera_2010
質問者

お礼

お礼が遅くなり、申し訳ございません。 教えていただいた方法で、実現できました。 ありがとうございました。

その他の回答 (1)

  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

DATEADD(day, 10, EOMONTH(date))  で、どうですか?  ちなみに、EOMONTH(date [, offset])は、dateを含む月の最終日を返します。offsetの指定により、指定月後の最終日の計算も可能です。  後は、null処理等、摘便付け加えてください。

idera_2010
質問者

お礼

お礼が遅くなり申し訳ございません。 いろいな方法があるんですね。 勉強になりました。 ありがとうございました。

関連するQ&A

  • ODBC SQLサーバーでSQLを実行したい・・・

    ODBC SQLサーバーでSQLを実行したい・・・ 昨日から入り浸っている初心者PGです。 昨日は、実行日から直近の金曜日の日付を抽出するというSQLを質問させて頂きました。 今回は前月の月初第一金曜日に当たる日付を出力するSQLについての質問となります。 下記のSQLは先輩が作成したSQLになります。 もっと簡単に書けないか悩んでいます。 補足として日付は8桁で出力をしたいです。(例:20100507) 宜しければご教授賜りたいです。(原文そのままコピーしてますw) /* いけてるsql */ SELECT case (6 - (datepart(Dw,cast(datename(year,dateadd(mm, -1, getdate())) + '-' + datename(month,dateadd(mm, -1, getdate())) + '-' + '01' as datetime)))) when '-1' then datename(year,cast(datename(year,dateadd(mm, -1, getdate())) + '-' + datename(month,dateadd(mm, -1, getdate())) + '-' + '01' as datetime) + 6) + datename(month,cast(datename(year,dateadd(mm, -1, getdate())) + '-' + datename(month,dateadd(mm, -1, getdate())) + '-' + '01' as datetime) + 6) + RIGHT('00'+CONVERT(varchar,datename(day,cast(datename(year,dateadd(mm, -1, getdate())) + '-' + datename(month,dateadd(mm, -1, getdate())) + '-' + '01' as datetime) + 6) ),2) else datename(year,cast(datename(year,dateadd(mm, -1, getdate())) + '-' + datename(month,dateadd(mm, -1, getdate())) + '-' + '01' as datetime) + (6 - (datepart(Dw,cast(datename(year,dateadd(mm, -1, getdate())) + '-' + datename(month,dateadd(mm, -1, getdate())) + '-' + '01' as datetime))))) + datename(month,cast(datename(year,dateadd(mm, -1, getdate())) + '-' + datename(month,dateadd(mm, -1, getdate())) + '-' + '01' as datetime) + (6 - (datepart(Dw,cast(datename(year,dateadd(mm, -1, getdate())) + '-' + datename(month,dateadd(mm, -1, getdate())) + '-' + '01' as datetime))))) + RIGHT('00'+CONVERT(varchar,datename(day,cast(datename(year,dateadd(mm, -1, getdate())) + '-' + datename(month,dateadd(mm, -1, getdate())) + '-' + '01' as datetime) + (6 - (datepart(Dw,cast(datename(year,dateadd(mm, -1, getdate())) + '-' + datename(month,dateadd(mm, -1, getdate())) + '-' + '01' as datetime))))) ),2) end

  • ODBC SQLサーバーでSQLを使いたい・・・

    ODBC SQLサーバーでSQLを使いたい・・・ SET NOCOUNT ON DECLARE @EDATE DATETIME DECLARE @CUNT INT SET @COUNT = 0 WHILE ( @I <> -7 ) BEGIN IF ( DATANAME( WEEKDAY, DATEADD( DD, -1, GETDATE()))) = "金曜" BREAK ELSE SELECT @CUNT = @CUNT + 1 END SET @EDATE = CONVERT( CHAR, CONVERT( VARCHAR, DATEADD(DD, @COUNT, GETDATE()), 112) SELECT @EDATE 実行日からさかのぼり、金曜日の日付を表示したいSQLを作成しています。 なぜか"金曜"がおかしいとエラーが出てしまいます。 どなたかわかる方いましたらご教授お願い致します。

  • T-SQL(SQL Server2000) 月数の差の求め方

    お世話になります。 T-SQL(SQL Server2000)で月数の差の求めたいのですが、良い方法がないでしょうか? 関数の中に"DATADIFF"というものがありますが、これだと↓ SET @l_day1 = CONVERT(DATETIME,'2008/10/31',120) SET @l_day2 = CONVERT(DATETIME,'2008/11/01',120) DATADIFF(MONTH,@l_day1,@l_day2) /* 結果 */ 1 "2008/10/31" と "2008/11/01" の24時間の差の場合でも、結果に月数のさは"1"と出てしまいます。 上記の改善方法、又は、月数の差を求めれるロジック等をご存知の方が居ましたらお知恵をお貸しください。 宜しくお願い致します。

  • ODBC SQL ServerでSQLを発行したいのですが・・・

    ODBC SQL ServerでSQLを発行したいのですが・・・ IDがそのまま表示されてしまっていたので、再度登録しなおしました>< ・実行SQL DECLARE @DATE DATETIME DECLARE @STARTDATE DATETIME SET @DATE = GETDATE() SET @STARTDATE = DATEADD(DAY,-7,@DATE) SELECT * FROM teble WHERE 配達開始日 >= @DATE AND 配達開始日 <= @STARTDATE 上記のようなSQLを発行しデータを取得したいのですが、実行結果に表示がされません。 どうしていいかわからず困っています。 頭のDECLARE文しか動いていないのではないんだろうかと思っています。 実行ツールはCommon SQL Envieron mentを使用しています。

  • sql serverのsqlについて

    windows7 64bit sql server 2012 expressをつかっています。 select YEAR("日付") as yere,MONTH("日付") as month,収支名,sum("金額")as kin from 収支 group by YEAR("日付"),MONTH("日付"),収支名 を実行して、 yere month 収支名 kin 2013 6 支出 13011 2013 6 収入 33500 2013 7 支出 20000 2013 7 収入 70000 と、なりましたが、同じ年、月の収支と支出を求める表を得るにはどうしたらよいでしょうか? yere month 差 2013 6 -24089 2013 7 50000 のような感じです。 (もとのテーブルはこれです) id 日付 収支名 項目 金額 1 2013-06-16 収入 給料 15000 2 2013-06-16 支出 ガス代 555 ...... 宜しくお願いします。

  • [Excel関数]締切日を指定して「翌月~日」と表示させたい

    現在、入出金の記録のブックの中に、クレジットカード引き落とし日を確認できる一覧表をExcelのシートで作っています。 月末締め、翌々月4日引き落としのカードの場合、A1に=TODAY()を入れて =DATE(YEAR(A1), MONTH(A1)+2, 4) とやればうまくいくと検索して発見しましたが、次の場合はどのようにしたらいいのでしょうか。 ・毎月15日締めで、翌月10日引き落とし ・毎月10日締めで、翌月5日引き落とし 上の例え2点とも関数としてはあまり変わらないと思うのですが、サッパリわかりません。 どなたかお分かりになりましたら教えていただけると幸いです。

  • oracle sql

    oracle sql SELECT TO_CHAR(sysdate,'eeyy"年 "month" "dd"日"','nls_calendar = ''Japanese Imperial''') as AA FROM DUAL というSQLを記述した際の検索結果は 平成22年 2月 03日 という値になります。 日の部分の前0を消したいのですが、なにか方法はありませんか? (「03日」→「3日」)

  • SQL Server 2008 0で除算ができません。

    はじめまして、初投稿です。 初歩的な質問となるかもしれませんが、お答えください。 SQL Server Reporting Service 2008を使用しております。 表の中で率を計算し、出力する際に、 0で除算しましたとエラーが出てしまいます。 以下、設定内容です。 ■解決目標■ プレースホルダにて、率を出力したい(クエリ内では行わない) ■プレースホルダ プロパティ■ =IIF(sum(Fields!案件数.Value)=0,0,sum(Fields!受注件数.Value)/sum(Fields!案件数.Value)) ■クエリ■ select isnull(SUM(orders),0) as '受注件数', isnull(SUM(loss),0) as '失注件数', isnull(SUM(orders),0)+isnull(SUM(loss),0) as '案件数' from ~ ■エラー文■ 警告 1 [rsRuntimeErrorInExpression] textrun '受注率.Paragraphs[0].TextRuns[0]' の Value 式にエラーが含まれています。0 で除算しようとしました。 できましたら、早急なご回答をお願いいたします。

  • C++で経過日の計算

    1月1日から5月1日までの日数を計算するプログラムで、 途中までできたんですけど、正しい値が出ません。 何がダメかもわかりません。 ご教授お願いします。 #include <stdio.h> struct Date{ int month; //月 int day; //日 }; int month_day(struct Date date) { int md[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; //月毎の日数 int i = 0; int days = 0; for(i = 1; i <= date.month - 1; i++){ days = days + md[i]; i = i + 1; } days = days + date.day; return 0; } int main(int, char **) { struct Date date; int days; date.month = 5; date.day = 1; days = month_day(date); printf("%d Days\n", days); return 0; } という感じです。 int month_day()の中の処理を書くだけなんですが、 特にエラーも出ないので、何かがおかしいのはわかってるんですが、具体的な所がどこかわからず 困っています。 お願いします。

  • oracleのsqlで日付判断

    テーブルに以下の以下の様に日付が登録されています。、 cal_year cal_month cal_day item1 item2 item3 ・・・・・・ : 2019 6 29 2019 6 30 2019 7 1 2019 7 2 ; 2019 7 10 2019 7 11 ; 2019 7 20 2019 7 21 : 2019 7 31 2019 8 1 2019 8 2 : 見ての通り、テーブルに登録されている日付が、年、月、日と各々で 登録されており、また、月と日には、ゼロ埋めされてない値となって います。 因みに、cal_year、cal_month、cal_dayの属性は、varchar2です。 以下のsqlで、日付指定で、システム日付より以降の日付のデータを 取得しようとしているのですが、上手く行きません。 select * from tableA where cal_year||cal_month||cal_day>to_char(sysdate,'FMYYYYMMDD') order by cal_year,to_number(cal_month),to_number(cal_day) ; 今日、2019/7/22でやると、「2019 7 3」以降が出力されます。 また、日付を直接指定するとエラーとなります。 select * from tableA where cal_year||cal_month||cal_day>to_char('2019722','FMYYYYMMDD') order by cal_year,to_number(cal_month),to_number(cal_day) ; 「SQL : ORA-01481: 数値書式モデルが無効です」となります。 何がいけないのでしょうか。 このような使い方はダメなのでしょうか。 それとも、使わない使い方をしているのでしょうか。 お願いいたします。