如何在 C# 中检索 0 作为第一个数字

本文关键字:第一个 数字 检索 | 更新日期: 2023-09-27 18:36:08

scenario:
我有一个具有记录001234的数据库,我正在用cmd.executescaler();调用它到一个int变量中。问题是当我从该变量中检索保存的数据(001234)数据时,它只给出123400001234很重要,这是数据库中首先出现的问题,其中sql省略了第一个零,然后我将数据类型更改为nvarchar,这有效,我如何准确地检索表单上的数据001234

注意:我不能将数据放入字符串中,因为我还必须对它们应用一些计算。

使用 Sql Server Visual Studio 2010 C#

希望清楚不要含糊不清。如果您需要更多信息,请告诉我。提前谢谢。

如何在 C# 中检索 0 作为第一个数字

数值数据类型没有也不能有前导零。因此,使用前导零的唯一方法是将值存储为字符串。

但是,这只是格式化向用户显示的输出的问题。您可以将数据库值读入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

如果这些前导零具有某种含义并且不能省略,则可以进行转换:

            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# 中的 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".

SQL 这样做的原因是 001234 = 1234 的任何数字格式,无论它是什么类型。作为一个"肮脏"的解决方案,你可以把它转换为一个int,它会给你1234,执行你的计算,然后把你的答案投射回字符串,加上前导零。

int myValue = Int32.Parse("001234");
int myAnswer = myValue * 2;
string myAnswerString = "00" + myAnswer.ToString();

最好的方法是按照@Thorsten Dittmar的建议格式化字符串。如果可能的话,一开始就不要将数值作为 varchar 存储在数据库中,但是我知道这有时是一项要求,但我看不出对这些值进行计算的意义。