1

通常,INTEGER 数据类型就足够了,但是在南非,ID 号的长度为 13,而 INTEGER 数据类型最多只能达到 10。我不喜欢使用像 VARCHAR 这样的字符,因为它不会限制输入 ID仅数字为整数值。我看到的唯一解决方案(除了使用 VARCHAR)是使用 DECIMAL。我看到的唯一问题是我不能像 VARCHAR 那样限制最大大小,并且数据输入可能有“,”和“。” 任何意见?

4

4 回答 4

4

假设您指的是南非国民身份证号码,根据维基百科,它总是有 13 位数字,那么我会选择CHAR(13)一个CHECK约束(CLR用户定义的数据类型也可能是一个选项)。

主要原因是“数字”不是数字,而是 ID。您不能对这些值进行加、减、乘等操作,因此使用数字数据类型没有任何好处。此外,ID 由具有各自含义的组件组成,因此能够解析它们可能很重要(并且在使用字符数据类型时更容易)。

事实上,根据您使用这些数据的方式,您还可以添加存储 ID 的各个组成部分(DOB、序列、公民身份)的列,作为计算列或实际列。这对于查询和报告(和索引)可能很方便,尤其是当您将 DOB 转换为 adatedatetime列时。

于 2013-05-06T19:36:35.807 回答
4

只需使用 BIGINT,它的范围从 -9223372036854775808 到 9223372036854775807,对于您的应用程序来说应该足够了。

于 2013-05-06T17:17:30.717 回答
3

我确实会使用VARCHARCHECK格式匹配的 a 。如果有内部验证,您甚至可以更复杂,例如校验位。现在,您已经为其他具有字母字符的国家/地区做好了准备,或者如果您需要处理前导零。

我不会使用整数,除非在该字段上进行某种算术运算有意义,这在这里几乎肯定不是真的。

于 2013-05-06T17:17:54.203 回答
-2

你也可以用,虽然看起来你只能得到小数点后 4 位数字。类型为 8 个字节,money范围从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807。

declare @num as money
select @num = '1,300,000.45'

select @num

结果是:

1300000.45

逗号和句点的解析可能取决于您的特定文化设置,尽管我不确定。

于 2013-05-06T17:28:33.737 回答