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

时间:2012-06-04 09:12:08

标签: c# visual-studio sql-server-2008

情形:
我有一个记录001234的数据库,我用cmd.executescaler();将其称为int变量。问题是当我从该变量中检索保存的数据(001234)时,它只提供123400中的001234很重要,这是第一次出现在db中的问题,其中sql省略了第一个零,然后我将数据类型更改为nvarchar,这是有效的,我如何才能正确检索表单上的数据{{ 1}}。

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

使用Sql Server visual studio 2010 c#

希望很明显不含糊。如果您需要更多信息告诉我。 提前谢谢。

5 个答案:

答案 0 :(得分:4)

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

但是,这只是格式化显示给用户的输出的问题。您可以将数据库值读入int变量,进行计算,并在显示值时执行以下操作:

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

并显示displayValue的值。

答案 1 :(得分:1)

如果您想在代码方面工作

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

答案 2 :(得分:0)

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

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

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

最好的方法是按照@Thorsten Dittmar的建议格式化你的字符串。如果可能的话,不要将数值作为varchar存储在db中,但我知道这有时是一个要求,但是我无法看到对这些值进行计算的重点。

由于 Ĵ

答案 3 :(得分: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');
            }

答案 4 :(得分: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".