簡體   English   中英

如何在C#中檢索0作為第一個數字

[英]How to retrieve 0 as the first number in C#

設想:
我有一個記錄為 001234 的數據庫,我用cmd.executescaler();調用它cmd.executescaler(); 成一個int變量。 問題是當我從該變量中檢索保存的數據 ( 001234 ) 數據時,它只給出1234 001234中的00很重要,這是第一次出現在 db 中的問題,其中 sql 省略了第一個零,然后我將數據類型更改為 nvarchar 有效,我如何才能准確地檢索表單上的數據001234

注意:我不能將數據轉換為字符串,因為我還必須對它們進行一些計算。

使用 Sql Server Visual Studio 2010 c#

希望它清楚而不是模糊。 如果您需要更多信息,請告訴我。 提前致謝。

數字數據類型沒有也不能有前導零。 因此,具有前導零的唯一方法是將值存儲為字符串。

但是,這只是格式化顯示給用戶的輸出的問題。 您可以將數據庫值讀入一個int變量,進行計算並在顯示值時,您可以執行以下操作:

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

並顯示displayValue的值。

如果你想在代碼方面工作

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

如果你想在數據庫端工作,你需要一個允許編寫這種查詢的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

SQL 這樣做的原因是因為 001234 = 1234 是任何數字格式,無論它是什么類型。 作為“骯臟”的解決方案,您可以將其轉換為一個 int 值,這將為您提供 1234,執行您的計算,然后將您的答案轉換回添加前導零的字符串。

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

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

最好的方法是按照@Thorsten Dittmar 的建議格式化字符串。 如果可能,開始時不要將數字值作為 varchar 存儲在數據庫中,但是我知道這有時是必需的,但是我看不到對這些值進行計算的意義。

如果那些前導零具有某種意義並且不能被遺漏,則可以進行轉換:

            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');
            }

您可以在檢索您的號碼后在 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".

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM