如何在 MS SQL Server 2012 列中输入数字?
How to key in numeric digit as enter in MS SQL Server 2012 column?
我需要在数据库中存储准确的数字数据。
假设必须将 123.200 或 123.1 准确保存到数据库中。
但如果列类型设置为固定 2 位的十进制,结果将在数据库中出现 123.20 或 123.10。
如果我只想在 database/report 上显示 123.200 或 132.1,我该怎么办?
无需系统自动转换为任何其他小数。
您可以将值 "as is" 存储在 varchar
类型中。
这种方法的问题是数据库允许在那里存储任何字符串,即使它不是数字,比如 10abc.xyz23
如果您需要知道如何向用户显示号码,则需要以某种方式存储此信息。由于列中每个数字的格式可能不同,因此您需要为每一行存储此格式信息。
我将其存储为 decimal
类型,具有足够大的规模和精度以涵盖数据的所有可能范围,此外还有额外的列 DecimalPlaces
,其中将包含数字您的报告引擎在显示值时应使用的小数位数。
如果您必须这样做,那么正如其他人所建议的那样,您将需要使用字符数据类型来存储它。我还会添加一个计算列,使数值也很容易获得:
create table T (
Val varchar(39) not null,
Val_numeric as CONVERT(decimal(38,10),Val) persisted
)
go
insert into T(Val) values
('123.200'),
('123.1')
select * from T
结果:
Val Val_numeric
--------------------------------------- ---------------------------------------
123.200 123.2000000000
123.1 123.1000000000
当您需要 "user entered" 值时,您使用 Val
。当你需要真正的价值时,你使用Val_Numeric
。这还有一个好处(没有复杂的检查约束),您不能在 Val
列中输入任何无效值。例如:
insert into T(Val) values ('1.2.3')
产生错误:
Msg 8114, Level 16, State 5, Line 12
Error converting data type varchar to numeric.
我需要在数据库中存储准确的数字数据。
假设必须将 123.200 或 123.1 准确保存到数据库中。
但如果列类型设置为固定 2 位的十进制,结果将在数据库中出现 123.20 或 123.10。
如果我只想在 database/report 上显示 123.200 或 132.1,我该怎么办?
无需系统自动转换为任何其他小数。
您可以将值 "as is" 存储在 varchar
类型中。
这种方法的问题是数据库允许在那里存储任何字符串,即使它不是数字,比如 10abc.xyz23
如果您需要知道如何向用户显示号码,则需要以某种方式存储此信息。由于列中每个数字的格式可能不同,因此您需要为每一行存储此格式信息。
我将其存储为 decimal
类型,具有足够大的规模和精度以涵盖数据的所有可能范围,此外还有额外的列 DecimalPlaces
,其中将包含数字您的报告引擎在显示值时应使用的小数位数。
如果您必须这样做,那么正如其他人所建议的那样,您将需要使用字符数据类型来存储它。我还会添加一个计算列,使数值也很容易获得:
create table T (
Val varchar(39) not null,
Val_numeric as CONVERT(decimal(38,10),Val) persisted
)
go
insert into T(Val) values
('123.200'),
('123.1')
select * from T
结果:
Val Val_numeric
--------------------------------------- ---------------------------------------
123.200 123.2000000000
123.1 123.1000000000
当您需要 "user entered" 值时,您使用 Val
。当你需要真正的价值时,你使用Val_Numeric
。这还有一个好处(没有复杂的检查约束),您不能在 Val
列中输入任何无效值。例如:
insert into T(Val) values ('1.2.3')
产生错误:
Msg 8114, Level 16, State 5, Line 12
Error converting data type varchar to numeric.