[英]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.