use*_*365 10 sql-server-2008 sql-server
我在一个表中插入了两条记录。
create table num(id int)
insert into num values(0023)
insert into num values(23)
select * from num
Run Code Online (Sandbox Code Playgroud)
当我查询它们时,它们都显示为23
. 这意味着 SQL Server 忽略前导 0。这背后的机制是什么?我如何让 SQL Server 在我插入它们时返回值(即0023
和23
)?
Gra*_*hey 28
0023
不是一个数字。这是一个字符串。23
是数字。SQL Server 能够识别出不需要这些额外的零来定义数字,因此它会忽略它们。如果您想向应用程序显示一个值为 0023 的值,我建议您在应用程序端进行格式化。这样,如果您要进行加法、聚合或其他计算,存储在 SQL Server 中的数字仍然是一个数字。如果真的要存储为' 0023
',则需要将其转换为字符字段;字符、varchar、nvarchar、nchar。
在其他答案中已经说过这00023
是一个数字;我只想补充一点,您可以使用计算列来使用自定义格式显示该数字。例如,
create table num_table(id int not null primary key identity(1,1),
num int, leading_zeros smallint,
constraint chk_leading_zero_nonnegative check (leading_zero>=0),
num_formatted as replicate('0',coalesce(leading_zeros,0)) +cast(num as varchar(10)));
insert into num_table(num,leading_zeros) values(23,2) ;
select num_formatted from num_table; -- output '0023'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
114133 次 |
最近记录: |