SQL Server中具有最大长度的数字的数据类型

时间:2012-10-04 09:05:34

标签: sql-server sql-server-2008

我想存储长度超过20位但未定义最大长度的数字。

我搜索了输入最大值并找到varchar(max)的数据类型,我希望有类似numeric(max)的内容但不存在。

我应该使用什么,使用varchar(max)是否可以,但我如何验证号码?

3 个答案:

答案 0 :(得分:1)

bigint的范围为-2 ^ 63(-9,223,372,036,854,775,808)至2 ^ 63-1(9,223,372,036,854,775,807),因此可能符合您的需求。

SQL Server中没有更大的整数类型,因此您可能需要考虑基于字符的字段(包含与在文本字段中存储数字数据相关的所有转换和排序问题)。

答案 1 :(得分:1)

根据this

  

数据类型“float”definetly具有最大数量的支持,并支持309(!!!)位数字。

这取决于你的号码是否为整数,真实,负数......

如果您打算使用varchar(max)存储数字,请深入思考。数据库中列的类型(对我来说)是确保数据一致性的最重要的一点。所以它有可能但是真的有必要吗?

答案 2 :(得分:1)

  

使用varchar(max)是否可以,但我如何验证号码?

您可以使用检查约束:

CREATE TABLE Numbers (
     n varchar(max) not null,
     constraint CK_Numeric CHECK (n not like '%[^0-9]%')
)

检查约束确保n列中的任何字符都不在0-9范围之外。这是双重否定,但这是表达这种情况的最简单方法。如果值可以包含小数,则可能需要更复杂的检查:

CREATE TABLE Decimals (
     d varchar(max) not null,
     constraint CK_Numeric CHECK (
        d not like '%[^0-9.]%' AND
        LEN(d) - LEN(REPLACE(d,'.','')) in (0,1))
)

这就是说.现在被允许了,LEN检查确保它只在字符串中出现0或1次。