Sql server 在sql server中存储带有逗号和句点的数字(数据类型)

Sql server 在sql server中存储带有逗号和句点的数字(数据类型),sql-server,sqldatatypes,Sql Server,Sqldatatypes,在SQL SERVER中存储一个数字的最佳方法是什么,这样如果我有一个像 192234.35 它会被这样存储吗 将数字作为数据类型会起作用吗?我建议将其存储为十进制 在SQL Server 2012+中,我们有format函数,可用于使用千位分隔符进行格式化 FORMAT(@d,'#,0.0000') 在以前的版本中,我们可以使用一些自定义函数,我建议将其存储为十进制 在SQL Server 2012+中,我们有format函数,可用于使用千位分隔符进行格式化 FORMAT(@d,'#,0.0

在SQL SERVER中存储一个数字的最佳方法是什么,这样如果我有一个像

192234.35

它会被这样存储吗


将数字作为数据类型会起作用吗?

我建议将其存储为十进制

在SQL Server 2012+中,我们有format函数,可用于使用千位分隔符进行格式化

FORMAT(@d,'#,0.0000')

在以前的版本中,我们可以使用一些自定义函数,我建议将其存储为十进制

在SQL Server 2012+中,我们有format函数,可用于使用千位分隔符进行格式化

FORMAT(@d,'#,0.0000')

在以前的版本中,我们可以使用一些自定义函数

推荐的方法是将不带逗号的数字存储为十进制类型(假设所讨论的192234.35是一个数字),并将其显示给用户,只需添加逗号即可使数字可读


但是,如果您不打算对其进行任何数学运算(如平均值、总和等),您可以将其像VARCHAR一样自由地存储。

建议将不带逗号的数字存储为十进制类型(假设所讨论的192234.35是单个数字),并将其显示给用户,只需添加逗号即可使数字可读


但是,如果不打算对其进行任何数学运算(如平均值、求和等),您可以将其像VARCHAR一样自由存储。

不要将数字数据存储为文本。我更喜欢十进制,但任何东西都比文本好。这里有一个简单的想法。

declare @someDecimal decimal (8,2) = 192234.35
declare @someText varchar(16) = '192,234.35'

--here's how you would have to compare your text to an actual number
select 'True' where @someDecimal = convert(decimal(8,2),replace(@someText,',',''))

--then if you wanted to do any math on it, you would also have to convert it.
select convert(decimal(8,2),replace(@someText,',','')) * 2
--versus just
select @someDecimal * 2

--If you want to display it, use format...
select FORMAT(@someDecimal,'#,0.0000')
对数据进行排序是您会发现大问题的地方,因为它是按字符进行排序的。这也是为什么不将其存储为文本的原因

declare @tableOfText table (d varchar(16))
insert into @tableOfText (d)
values
('001'),
('010'),
('10'),
('110'),
('011'),
('1'),
('12')

select * from @tableOfText order by d desc

不要将数字数据存储为文本。我更喜欢十进制,但任何东西都比文本好。这里有一个简单的想法。

declare @someDecimal decimal (8,2) = 192234.35
declare @someText varchar(16) = '192,234.35'

--here's how you would have to compare your text to an actual number
select 'True' where @someDecimal = convert(decimal(8,2),replace(@someText,',',''))

--then if you wanted to do any math on it, you would also have to convert it.
select convert(decimal(8,2),replace(@someText,',','')) * 2
--versus just
select @someDecimal * 2

--If you want to display it, use format...
select FORMAT(@someDecimal,'#,0.0000')
对数据进行排序是您会发现大问题的地方,因为它是按字符进行排序的。这也是为什么不将其存储为文本的原因

declare @tableOfText table (d varchar(16))
insert into @tableOfText (d)
values
('001'),
('010'),
('10'),
('110'),
('011'),
('1'),
('12')

select * from @tableOfText order by d desc

您不必担心使用千位分隔符存储数字,这应该只是为了显示数据。请区分存储数据和显示数据。您可以将数字存储为192234.35(数字类型)。您可以根据需要显示它们。@GurV嗯,我从excel电子表格中获取一个值,并将其存储为字符串,希望能够将其与sql server中的值进行比较。不要将其保存为字符串,占用更多空间,而且您无法以匹配方式添加两个字符串。@BobSki不将其存储为字符串。。。曾经您可以比较数字,而无需将其存储为字符串。通过使用适当的数据类型处理数据,您将省去大量的心痛。您不应该担心使用千位分隔符存储数字,这应该只是为了显示数据。请区分存储数据和显示数据。您可以将数字存储为192234.35(数字类型)。您可以根据需要显示它们。@GurV嗯,我从excel电子表格中获取一个值,并将其存储为字符串,希望能够将其与sql server中的值进行比较。不要将其保存为字符串,占用更多空间,而且您无法以匹配方式添加两个字符串。@BobSki不将其存储为字符串。。。曾经您可以比较数字,而无需将其存储为字符串。通过使用适当的数据类型处理数据,您将省去大量的心痛。将其保存为数字(18,2)似乎可以完成工作将其保存为数字(18,2)似乎可以完成工作