繁体   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