我在下表中的表中有一个数据,它在varchar(8)数据类型中
总计
100
101
104.5
88
1038
64
108.3
10872
900
我喜欢在T-sql中使用ASC,这样我就能按升序显示它,不过我 不能这样做,因为它是在varchar(8)形式
例如
select Total from
Table A
Order by Total ASC
如何首先将这些值添加到临时临时表中? 以及如何将此varchar(8)值转换为什么?以便 您可以使用T-SQL查询以ASC或升序显示它们吗? 任何人吗?
答案 0 :(得分:1)
您可以像这样投射价值。
SELECT
Total
FROM Table A
ORDER BY CAST(Total AS FLOAT) ASC
答案 1 :(得分:1)
示例中的值看起来像浮点数。所以
1)由于它们都不超过8位数,因此可以将其转换为浮点数(53)(精度约为15位小数),而不会丢失数据。或小数(15,7)完全确定。
2)通常,将浮点值存储为数据库中的字符串是很奇怪的。
答案 2 :(得分:1)
您可能会丢失转换回浮动的数据。
所以这是一个基于varchar的排序。
DECLARE @badDesign TABLE (floatcol varchar(8) NOT NULL);
INSERT @badDesign VALUES ('100'),('101'),('104.5'),('88'),('1038'),('64'),('108.3'),('10872'),('900'),('108'), ('108.32'), ('108.4')
SELECT *
FROM @badDesign
ORDER BY
RIGHT('00000000' +
CASE
WHEN CHARINDEX('.', floatcol) = 0 THEN floatcol
ELSE LEFT(floatcol, CHARINDEX('.', floatcol)-1)
END
, 8),
CASE
WHEN CHARINDEX('.', floatcol) = 0 THEN '.0'
ELSE SUBSTRING(floatcol, CHARINDEX('.', floatcol)+1, 8)
END
答案 3 :(得分:0)
使用CAST
或CONVERT
功能,例如:
select Total from
Table A
Order by CAST(Total as float) ASC
答案 4 :(得分:0)
除非您想保留转换后的值,否则无需将其存储在临时表中。只需将它们转换为排序:
select Total
from [Table A]
order by cast(Total as float)
(升序是排序的默认方式,因此您无需指定。)