0

シナリオ:
レコード001234を持つデータベースがあり、それを変数に呼び出していcmd.executescaler();ますint。問題は、保存されたデータ(001234)データをその変数から取得すると、それが与えるのは。だけになること1234です。00重要なの001234は、これが最初にdbで発生した問題で、sqlが最初のゼロを省略した後、データ型をnvarcharに変更しました。これは、フォーム上のデータを正確に取得する方法です001234

注:データにいくつかの計算を適用する必要があるため、データを文字列に取り込むことはできません。

SQL Server Visual Studio 2010 C#を使用する

曖昧ではなく明確であることを願っています。さらに詳しい情報が必要な場合は教えてください。前もって感謝します。

4

5 に答える 5

4

数値データ型には先行ゼロがなく、また持つこともできません。したがって、先行ゼロを設定する唯一の方法は、値を文字列として格納することです。

ただし、これはユーザーに表示される出力をフォーマットするだけの問題です。データベース値をint変数に読み込んで計算を行い、値を表示するときに次のことができます。

string displayValue = String.Format("{0:D6}", intValue);

の値を表示しますdisplayValue

于 2012-06-04T09:16:12.580 に答える
1

コード側で作業したい場合:

string displayValue = String.Format("{0:D6}", intValue);

DB側で作業する場合は、この種のクエリを記述できるPad関数が必要です。

SELECT dbo.PadString ('8', '0', 5)
->Result: 00008

SELECT dbo.PadString ('abc', '*', 12)
->Result: *********abc

SELECT dbo.PadString ('abc', '0', 7)
->Result: 0000abc

T-SQLで関数を作成する

CREATE FUNCTION [dbo].[PadString] 
  (@Seq varchar(16),
   @PadWith char(1),
   @PadLength int
  ) 
RETURNS varchar(16) AS

BEGIN 
  declare @curSeq varchar(16)

  SELECT @curSeq = ISNULL(REPLICATE(@PadWith, @PadLength - len(ISNULL(@Seq ,0))), '') + @Seq

  RETURN @curSeq
END
于 2012-06-04T09:20:56.317 に答える
0

SQLがこれを行う理由は、タイプに関係なく、任意の数値形式で001234=1234であるためです。「ダーティ」ソリューションとして、1234を与えるintとしてキャストし、計算を実行してから、先行ゼロを追加して文字列に答えをキャストすることができます。

int myValue = Int32.Parse("001234");
int myAnswer = myValue * 2;

string myAnswerString = "00" + myAnswer.ToString();

ただし、最善の方法は、@ThorstenDittmarによって提案されたように文字列をフォーマットすることです。可能であれば、最初からvarcharとしてデータベースに数値を格納しないでください。ただし、これが必要になる場合があることはわかっていますが、これらの値を計算する意味がわかりません。

于 2012-06-04T09:22:09.527 に答える
0

これらの先行ゼロに何らかの意味があり、省略できない場合は、変換を実行できます。

            int number = 0;
            string strNumber = (string)cmd.ExecuteScalar();
            if(int.TryParse(strNumber, out number))
            {
                // process number

                // if you want some output to be formatted with leading 
                // zeros you can use PadLeft method
                int totalNumberOfDigits = 6;
                string strResult = number.ToString().PadLeft(totalNumberOfDigits, '0');
            }
于 2012-06-04T09:25:15.013 に答える
0

固定長の数値があるため、数値を取得した後、c#でstring.PadLeft()を使用できます。

msdnからの例、

string str = "forty-two";
char pad = '.';

Console.WriteLine(str.PadLeft(15, pad));    // Displays "......forty-two".
Console.WriteLine(str.PadLeft(2, pad));     // Displays "forty-two".
于 2012-06-04T10:03:58.613 に答える