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

C# 如何在C中检索0作为第一个数字#,c#,visual-studio,sql-server-2008,C#,Visual Studio,Sql Server 2008,场景: 我有一个数据库有一个记录001234,我用cmd.executescaler()调用它转换为int变量。问题是当我从变量中检索保存的数据(001234)数据时,它只给出123400在001234中很重要,这是数据库中首先出现的问题,sql省略了前零,然后我将数据类型更改为nvarchar,这很有效,我如何准确地检索表单上的数据001234 注意:我不能将数据转换成字符串,因为我还必须对它们进行一些计算 使用SQLServerVisualStudio2010C# 希望这是明确的,而不是含糊

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

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

使用SQLServerVisualStudio2010C#

希望这是明确的,而不是含糊不清的。如果你需要更多的信息,告诉我。
提前感谢。

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

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

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

并显示
displayValue

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

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

如果您想在代码端工作

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存储在数据库中,但是我知道这有时是一项要求,但我看不出对这些值进行计算的意义。

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

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

            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".
检索完号码后,您可以在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".

为什么要在dbms中将数值存储为文本?你应该在最后一步应用格式。你自相矛盾。您可以得到一个整数(定义中没有前导零)或一个字符串。从逻辑上讲,左边的整数零没有任何用处。除非将其转换为字符串。左侧的零很重要。我的数字仅为6个字符的数字。为什么在dbms中将数字值存储为文本?你应该在最后一步应用格式。你自相矛盾。您可以得到一个整数(定义中没有前导零)或一个字符串。从逻辑上讲,左边的整数零没有任何用处。除非您将其转换为字符串。左侧的零很重要,我的数字仅为6个字符的数字。可能该数字左侧仅包含一个零,如012345Thank@user1415295。请分享解决方案,然后,我们都在这里学习如何,不仅知道什么是可能的,什么是不可能的。谢谢Jno不,实际上我的意思是我的数字可能包含多个前导零,可能数字左侧只包含一个零,如012345谢谢@user1415295请分享解决方案,我们都在这里学习如何,不仅知道什么是可能的,什么不是。谢谢Jno不,实际上我的意思是我的数字可以包含多个前导零。谢谢你们的方法,谢谢你们,伙计,谢谢你们所有人,愿上帝保佑我们所有人。完善你们的方法,谢谢你们,伙计,谢谢你们所有人,愿上帝保佑我们所有人。