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

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

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

Re[6]: SQL SereverからCSV出力


(過去ログ 73 を表示中)

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

■42893 / inTopicNo.1)  SQL SereverからCSV出力
  
□投稿者/ じょしゅ (5回)-(2009/10/23(Fri) 03:03:52)

分類:[VB.NET/VB2005 以降] 

DB:SQL Server2005ExpressEdition
開発環境:VB2008、Win/Xp

SQLServerからデータをCSVに出力したく思っています。
受注日という項目があり、int型になっていて「20091022」という形で
日付が8桁の数字で格納されています。
これをCSVに出力する際に、「2009/10/22」という形で出したいのですが
どのようにしたらいいのでしょうか?

現在は
フォームで抽出条件を指定して
SQLSereverのデータをDatagridviewに表示。
このとき受注日はCellFormattingで 0000/00/00 として表示させています。
この後、以下を参考にCSVに出力していますが、
http://dobon.net/vb/dotnet/file/writecsvfile.html
出力された受注日は「20091022」となってしまいます。

根本的にやり方を変えないといけないでしょうか?



引用返信 編集キー/
■42897 / inTopicNo.2)  Re[1]: SQL SereverからCSV出力
□投稿者/ みきぬ (633回)-(2009/10/23(Fri) 09:22:49)
※引用の順番が前後しています。

No42893 (じょしゅ さん) に返信
> 現在は
> フォームで抽出条件を指定して
> SQLSereverのデータをDatagridviewに表示。
> このとき受注日はCellFormattingで 0000/00/00 として表示させています。
>
抽出したデータは int型の 20091022で、それを表示するときに書式指定しているわけですね。

> この後、以下を参考にCSVに出力していますが、
> http://dobon.net/vb/dotnet/file/writecsvfile.html
> 出力された受注日は「20091022」となってしまいます。
>
抽出したデータは int型の 20091022 のままなので、単純にCSV出力するとそうなりますね。
(リンク先をちゃんと見たわけじゃないから勘だけど)

> SQLServerからデータをCSVに出力したく思っています。
> 受注日という項目があり、int型になっていて「20091022」という形で
> 日付が8桁の数字で格納されています。
> これをCSVに出力する際に、「2009/10/22」という形で出したいのですが
> どのようにしたらいいのでしょうか?
>
方針としては、すぐ思いつくのは2つ。

1. DBから抽出するときに "2009/10/22" という文字列の形で抽出する
2. CSV に出力するときに、"2009/10/22" という文字列に加工する

たぶん1のが楽。
ただ、どちらがより適切かどうかは私には判断できないので、考えてみてください。
引用返信 編集キー/
■42915 / inTopicNo.3)  Re[2]: SQL SereverからCSV出力
□投稿者/ じょしゅ (6回)-(2009/10/23(Fri) 13:33:39)
No42897 (みきぬ さん) に返信

みきぬ さん、ありがとうございます。

> 方針としては、すぐ思いつくのは2つ。
>
> 1. DBから抽出するときに "2009/10/22" という文字列の形で抽出する
> 2. CSV に出力するときに、"2009/10/22" という文字列に加工する
>
> たぶん1のが楽。

1でやってみたいのですがSQL文の書き方が良く分かりません。
SQLserverではFormat関数が使えないので、castとかを使って
SELECT Name ,Ccast(EntryDate AS varchar) FROM TB_uriage
というようにするのかと思いますが
"YYYY/MM/DD"はどのように指定したらいいのでしょうか。

引用返信 編集キー/
■42922 / inTopicNo.4)  Re[3]: SQL SereverからCSV出力
□投稿者/ みきぬ (635回)-(2009/10/23(Fri) 14:24:25)
No42915 (じょしゅ さん) に返信
> 1でやってみたいのですがSQL文の書き方が良く分かりません。
> SQLserverではFormat関数が使えないので、castとかを使って
> SELECT Name ,Ccast(EntryDate AS varchar) FROM TB_uriage
> というようにするのかと思いますが
> "YYYY/MM/DD"はどのように指定したらいいのでしょうか。
>
自分が思いついたのは、へぼいけどこんな感じ。
もっといい方法はあると思いますが、すぐには出てこないです。

select STR(20091022 / 10000, 4) + '/' + STR((20091022 % 10000) / 100, 2) + '/' + STR(20091022 % 100, 2)
引用返信 編集キー/
■42923 / inTopicNo.5)  Re[4]: SQL SereverからCSV出力
□投稿者/ すがり (85回)-(2009/10/23(Fri) 14:27:44)
SQLServerだとCONVERTというのがあるみたいですね。

http://msdn.microsoft.com/ja-jp/library/ms187928.aspx
http://blog.livedoor.jp/jukula/archives/50898785.html

試せる環境持ち合わせていないので未検証になってしまいますが・・・
引用返信 編集キー/
■42924 / inTopicNo.6)  Re[1]: SQL SereverからCSV出力
□投稿者/ noname (4回)-(2009/10/23(Fri) 14:44:38)
select
CONVERT(datetime,CAST(受注日 as nvarchar(8)),111)
from Table_1

これで試してください。

No42893 (じょしゅ さん) に返信
> DB:SQL Server2005ExpressEdition
> 開発環境:VB2008、Win/Xp
>
> SQLServerからデータをCSVに出力したく思っています。
> 受注日という項目があり、int型になっていて「20091022」という形で
> 日付が8桁の数字で格納されています。
> これをCSVに出力する際に、「2009/10/22」という形で出したいのですが
> どのようにしたらいいのでしょうか?
>
> 現在は
> フォームで抽出条件を指定して
> SQLSereverのデータをDatagridviewに表示。
> このとき受注日はCellFormattingで 0000/00/00 として表示させています。
> この後、以下を参考にCSVに出力していますが、
> http://dobon.net/vb/dotnet/file/writecsvfile.html
> 出力された受注日は「20091022」となってしまいます。
>
> 根本的にやり方を変えないといけないでしょうか?
>
>
>
引用返信 編集キー/
■42928 / inTopicNo.7)  Re[4]: SQL SereverからCSV出力
□投稿者/ じょしゅ (7回)-(2009/10/23(Fri) 16:08:20)
No42922 (みきぬ さん) に返信

> 自分が思いついたのは、へぼいけどこんな感じ。
> もっといい方法はあると思いますが、すぐには出てこないです。
>
> select STR(20091022 / 10000, 4) + '/' + STR((20091022 % 10000) / 100, 2) + '/' + STR(20091022 % 100, 2)


得たい結果は返ってきました。みきぬ さん ありがとうございました。
引用返信 編集キー/
■42929 / inTopicNo.8)  Re[2]: SQL SereverからCSV出力
□投稿者/ じょしゅ (8回)-(2009/10/23(Fri) 16:14:03)
No42924 (noname さん) に返信
> select
> CONVERT(datetime,CAST(受注日 as nvarchar(8)),111)
> from Table_1
>
> これで試してください。
>

なるほど、CONVERTとCASTを両方使うのですね。
やってみたのですが、受注日の値に8桁入っていれば問題ないです。
ところが「0」が入っている場合もあることが判明しました。
この場合どうすればいいのでしょうか?
受注日には0または8桁の数字が入ってきます。
それ以外の桁はありません。

引用返信 編集キー/
■42931 / inTopicNo.9)  Re[3]: SQL SereverからCSV出力
□投稿者/ επιστημη (2228回)-(2009/10/23(Fri) 16:20:37)
επιστημη さんの Web サイト
> ところが「0」が入っている場合もあることが判明しました。
> この場合どうすればいいのでしょうか?

こっちが訊きたいわ!

捨てていい? それとも 0000/00/00? ほかのなにか?
それ示してくれんと答えようがないっしょ。

引用返信 編集キー/
■42932 / inTopicNo.10)  Re[4]: SQL SereverからCSV出力
□投稿者/ じょしゅ (10回)-(2009/10/23(Fri) 16:30:39)
No42931 (επιστημη さん) に返信
>>ところが「0」が入っている場合もあることが判明しました。
>>この場合どうすればいいのでしょうか?
>
> こっちが訊きたいわ!
>
> 捨てていい? それとも 0000/00/00? ほかのなにか?
> それ示してくれんと答えようがないっしょ。
>

失礼しました。
0000/00/00 にできればいいのですが。
引用返信 編集キー/
■42937 / inTopicNo.11)  Re[5]: SQL SereverからCSV出力
□投稿者/ もりお (117回)-(2009/10/23(Fri) 17:57:59)
2009/10/23(Fri) 18:01:17 編集(投稿者)
No42932 (じょしゅ さん) に返信
> 0000/00/00 にできればいいのですが。
0 であれば 0000/00/00
違ったら ...
という具合で条件分岐すると善いのではないでしょうか。

CASE式のススメ(前編)(1/3):CodeZine
http://codezine.jp/article/detail/404?p=1

引用返信 編集キー/
■42950 / inTopicNo.12)  Re[6]: SQL SereverからCSV出力
□投稿者/ じょしゅ (11回)-(2009/10/24(Sat) 17:21:20)
No42937 (もりお さん) に返信
> 2009/10/23(Fri) 18:01:17 編集(投稿者)
>
> ■No42932 (じょしゅ さん) に返信
>>0000/00/00 にできればいいのですが。
> 0 であれば 0000/00/00
> 違ったら ...
> という具合で条件分岐すると善いのではないでしょうか。
>
> CASE式のススメ(前編)(1/3):CodeZine
> http://codezine.jp/article/detail/404?p=1

ありがとうございます。
教えていただいた先をみて参考にします。


解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -