我想存储长度超过 20 位但未定义最大长度的数字。
我搜索保存输入并找到的最大值的数据类型varchar(max)
,我想要类似numeric(max)
但不存在的东西。
我应该使用什么,可以使用,varchar(max)
但是如何验证号码?
我想存储长度超过 20 位但未定义最大长度的数字。
我搜索保存输入并找到的最大值的数据类型varchar(max)
,我想要类似numeric(max)
但不存在的东西。
我应该使用什么,可以使用,varchar(max)
但是如何验证号码?
bigint
范围为 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807),因此可以满足您的需求。
SQL Server 中没有更大的整数类型,因此您可能不得不接受基于字符的字段(与将数字数据存储在文本字段中相关的所有转换和排序问题)。
据此,_
数据类型“float”肯定具有最大的数字支持,并支持 309 (!!!) 位的数字。
这取决于您的数字是否为整数,实数,可能为负数..
如果您打算使用 avarchar(max)
来存储数字,请仔细考虑。数据库中列的类型(对我而言)是确保数据一致性的最重要的一点。所以这是可能的,但真的有必要吗?
可以使用
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 次。