我想存储长度超过20位但未定义最大长度的数字。
我搜索了输入最大值并找到varchar(max)
的数据类型,我希望有类似numeric(max)
的内容但不存在。
我应该使用什么,使用varchar(max)
是否可以,但我如何验证号码?
答案 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次。