- PR -

DataGridの列に数値データをカンマ編集して表示する方法

投稿者投稿内容
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2003-04-25 17:24
お世話さまです。

今回はSQL-Server寄りの話になりそうなのでココに書くべきかどうか迷ったのですが、
他に適当な部屋も見つからなかったので通い慣れたココに書かせて頂きます。^^;

DataGridの1つの列にDBの2つのフィールドを連結させて表示させている
(一方がvarchar属性の文字列フィールドでもう一方がint属性の数値フィールド)
のですが、この数値フィールドをカンマ編集してグリッド上に表示させる方法を
教えて頂きたいのです。

カンマ編集するSQLコマンドを探してみたのですが、見つけることが
できませんでした。(FORMATコマンドみたいなのとかないんですね。^^;)

で、仕方がないので、現状では下記のようなデータ列を単純に文字列として
連結表示させています。

Fee_Name varchar(20)…料金名称
Fee int…料金

SELECT Fee_Name + CAST(Fee AS CHAR(7)) AS 料金 FROM TABLE

DataGridの列書式側で編集するワケにもゆかないので、なんとかSQLコマンドで
この料金(Fee)の部分をカンマ編集したいのですが…

何かよい方法はないでしょうか?
ぼると
常連さん
会議室デビュー日: 2003/04/09
投稿数: 42
投稿日時: 2003-04-25 19:41
@バインドする前にデータソースを編集する
AItemDataBound イベントでセルの内容を編集する

のどちらかで実現できると思います。

もちろんSQL文で処理してもいいんですが。
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2003-04-25 23:01
===>ぼると様

早速のレス、ありがとうございます。
申し遅れましたが、言語はASP.VBです。

>もちろんSQL文で処理してもいいんですが。
できればSQL文で処理してしまいたいので、
お手数ですがカンマ編集を実装したコマンドの例を
ご教示頂けないでしょうか?
ぼると
常連さん
会議室デビュー日: 2003/04/09
投稿数: 42
投稿日時: 2003-04-26 15:03
引用:

>もちろんSQL文で処理してもいいんですが。
できればSQL文で処理してしまいたいので、
お手数ですがカンマ編集を実装したコマンドの例を
ご教示頂けないでしょうか?

@桁数が固定ならCASE文を使ってカンマを挿入する
Aストアドファンクションを作成する
のどちらかでしょうか。

@は面倒なのでサンプル作る気になれません。
Aのサンプルを作ってみましたが、ストアドファンクションは
 初めて作ったのでこのまま使うのはやめた方がいいかもしれません。
コード:

CREATE FUNCTION EditCamma (@num int)
RETURNS varchar(20)
AS
BEGIN
    DECLARE @wk varchar(20), @result varchar(20)
    DECLARE @i int
    SET @wk = CAST(@num AS varchar)
    SET @result = ''
    SET @i = LEN(@wk)
    WHILE(@i > 0)
    BEGIN
        IF((LEN(@wk) - @i) > 0 AND (LEN(@wk) - @i) % 3 = 0)
            SET @result = ',' + @result
        SET @result = SUBSTRING(@wk, @i, 1) + @result
        SET @i = @i - 1
    END
    RETURN(@result)
END
GO

/* 使い方 */
select dbo.EditCamma(123456789)

moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2003-04-26 16:16
===>ぼると様

お世話さまです&お手数をおかけしました。
具体的なサンプル提示、誠にありがとうございます。

ストアドファンクション…プロシジャ以外にも
そんなのまで作ることができたんですね!?>SQL@0@

今、一見しただけでは何をやっているのか理解
出来そうもありませんので、明日以降、会社で
じっくり解析させて下さい。^^;

既存の関数や単一コマンドレベルでは実装できない
ということが判ったダケでも収穫です。

ありがとうございました。
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2003-04-28 15:16
こんにちは。

SQL Server では、CONVERT というのがありますけど...
money型に対して style 値の指定で、3桁ごとにカンマを挿入する/しないを
指定できるみたいですよ。
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2003-04-28 16:05
===>Qoo様

こんにちは!
またまたまたお世話さまです。

styleパラメータをヒントに下記のようなSQL文を作って
みましたところ、数値部である料金のカンマ編集が出来ました。^^;

SELECT REPLACE(CONVERT(VARCHAR, CAST(Fee AS MONEY), 1),'0.00','0') FROM TABLE

CONVERTコマンドでmoney属性のフィールドをstyle=1で編集すると0.00
という具合に小数部まで表示されてしまいますので、REPLACEコマンドで
強制的に0に変換してやりました。(笑)

アドバイスありがとうございました。

ぼるとさんのにもトライしてみるツモリです。
moondog
大ベテラン
会議室デビュー日: 2003/04/11
投稿数: 165
投稿日時: 2003-04-28 17:32
自己レスです。

SELECT REPLACE(CONVERT(VARCHAR, CAST(Fee AS MONEY), 1),'.00','') FROM TABLE

にしないと1の位の値が0でない場合に小数点がついたままに
なってしまいます。^^;

スキルアップ/キャリアアップ(JOB@IT)