C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: 【SQLServer2005 ストアドプロシージャ文字列→日


(過去ログ 34 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■16657 / inTopicNo.1)  【SQLServer2005 ストアドプロシージャ文字列→日
  
□投稿者/ OOO (6回)-(2008/04/09(Wed) 11:48:40)

分類:[データベース全般] 

【SQLServer2005 ストアドプロシージャ文字列→日付型 変換】

皆様、お世話になります。
会計テーブルの「会計年月」列の値の1ヶ月後を取得したいと思っています。

【経緯】
会計年月という列が存在し、そのデータ型はCHAR(6)になります。

なので、現在のデータベースの値は '200804'という形で格納されています。

この値の1ヶ月後の値を取得する場合は

SELECT
	会計年月 + 1
FROM
	会計テーブル

にて取得できるかと思っておりましたが、'200812'の時は'200813'になってしまいました。

なので上記は×で、一度日付型に変換しようと思い下記を実行しました。

SELECT 
	CAST(会計年月 AS DATETIME),
FROM
	会計テーブル

すると、

'2020-08-04 00:00:00.000'

という結果が返ってきてしまいました。
無事取得できたとしても、その月に1ヶ月プラスして文字列型に再キャストする必要がありますが。

結論としては

■'YYYYMM'形式に変換したい場合はどうすればよいか(探しても見つかりませんでした)

もっと良い方法あるよって方いらっしゃいましたらご教授いただけませんでしょうか。

宜しくお願いいたします。

引用返信 編集キー/
■16660 / inTopicNo.2)  Re[1]: 【SQLServer2005 ストアドプロシージャ文字列→日
□投稿者/ Mr.T (222回)-(2008/04/09(Wed) 12:47:51)
Mr.Tです、こんにちは。

この手の一発変換はないです。

最初から日付型でもっておけばよかった、という段階に戻せますか?

そうでなければ、4桁+2桁に文字分割して、地道に計算するしかないです。
#日付計算を行うユーザ関数にしておくとかできれば、毎回同じ処理を書かずにすみますがね

これを見て↓を思い出した。
http://blogs.wankuma.com/ogiogi/archive/2008/04/09/132337.aspx

引用返信 編集キー/
■16661 / inTopicNo.3)  Re[2]: 【SQLServer2005 ストアドプロシージャ文字列→日
□投稿者/ やじゅ (284回)-(2008/04/09(Wed) 13:19:32)
こんな感じのユーザ関数あたりを作成する

declare @yyyymm char(6);
select @yyyymm = '200812';

select convert(varchar(10),
dateadd(month,1,substring(@yyyymmdd,1,4) + '-' +
substring(@yyyymmdd,5,2) + '-01'),20);

こっからさらに年月だけにキャストすればいいのかな
引用返信 編集キー/
■16662 / inTopicNo.4)  Re[3]: 【SQLServer2005 ストアドプロシージャ文字列→日
□投稿者/ Mr.T (223回)-(2008/04/09(Wed) 13:21:16)
追記です。

#2005だったのわすれてた
関数一発じゃないけど、計算列を追加して、
YYYY-MM-01ってデータにしてから、Convertしてやればよさげ?

引用返信 編集キー/
■16663 / inTopicNo.5)  Re[4]: 【SQLServer2005 ストアドプロシージャ文字列→日
□投稿者/ Eternia (2回)-(2008/04/09(Wed) 13:43:43)
left(convert(varchar,dateadd(month,1,cast(会計年月+'01' as DATETIME)),112),6)

↑みたいな感じでいけるかな?

#試せる環境ないんで違ってたらごめんなさい


引用返信 編集キー/
■16844 / inTopicNo.6)  Re[5]: 【SQLServer2005 ストアドプロシージャ文字列→日
□投稿者/ OOO (8回)-(2008/04/11(Fri) 15:24:26)
皆様

ご回答いただきありがとうございます。
下記にていけました!

SELECT RIGHT(LEFT(DATEADD(MONTH,1,CONVERT(CHAR,会計年月 + '01')),10),4) + RIGHT(LEFT(CONVERT(CHAR,DATEADD(MONTH,1,会計年月 + '01'),13),5),2)

かなり強引です。
引用返信 編集キー/
■16845 / inTopicNo.7)  Re[6]: 【SQLServer2005 ストアドプロシージャ文字列→日
□投稿者/ OOO (9回)-(2008/04/11(Fri) 15:28:09)
No16844 (OOO さん) に返信
> 皆様
>
> ご回答いただきありがとうございます。
> 下記にていけました!
>
> SELECT RIGHT(LEFT(DATEADD(MONTH,1,CONVERT(CHAR,会計年月 + '01')),10),4) + RIGHT(LEFT(CONVERT(CHAR,DATEADD(MONTH,1,会計年月 + '01'),13),5),2)
>
> かなり強引です。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -