将 int 存储到 SQL,但保持前导零
Posted
技术标签:
【中文标题】将 int 存储到 SQL,但保持前导零【英文标题】:Storing an int to SQL, but keep leading zeros 【发布时间】:2014-06-12 02:41:29 【问题描述】:我的 SQL Server 2012 表中有一个字段定义为 Int。但是当我尝试使用转换 (Convert.toint32(textbox.text)) 从 C# 中的文本框中获取值时。假设文本框包含数字 0032,它将作为 32 删除 00 保存到数据库中。
除了更改字段数据类型之外的任何解决方案??
【问题讨论】:
0032
只是32
的字符串表示形式。您应该将值保存在 db 中(在这种情况下为32
),并在打印时根据需要使用一些格式化逻辑。
在这种情况下,它会比直接从 db 调用它需要太多的操作。它是一个发票编号字段,它应该以零开头。
@OJazem 使应用程序格式化显示的发票 ID。创建一个辅助函数。
@dean,不,长度不固定。
@dean 但是如果长度是固定的呢?那么这个问题有解决方案吗?
【参考方案1】:
数字数据类型不保留前导零,因为它们对您要存储的数字无关紧要。 Char 或 Varchar 更合适。您可以设置约束以确保仅存储数字字符。
如果您绝对无法更改数据类型,那么另一种选择是将前导零的数量存储到另一个 int
字段中
因此,在您的示例中,您将存储: 价值 : 32 前导零:2
【讨论】:
【参考方案2】:所以以数字格式保存到数据库 - 忽略前导零(正如其他人提到的那样),然后像这个例子一样格式化:
int i = 32;
string format = "0000";
Console.WriteLine(i.ToString(format));
【讨论】:
【参考方案3】:数据类型由一组可能的值和可以对其进行的操作来定义。
所以,这里的问题是:您将对这些值执行哪些操作?求和、加法、乘法……?
如果答案为“否”,则将列的类型更改为 varchar()
或 char()
并按原样存储值,并使用前导零。
如果是“是”,则存储一个正确的数字并将格式留给客户端。
无论如何,请始终尝试在数据库中使用适当的数据类型,域完整性是一件好事。
【讨论】:
以上是关于将 int 存储到 SQL,但保持前导零的主要内容,如果未能解决你的问题,请参考以下文章