我在下面的表格中有一个数据,它是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 query以ASC或升序显示它们?有没有人?
发布于 2011-08-29 14:33:24
你可以像这样转换这个值。
SELECT 
    Total 
FROM Table A
ORDER BY CAST(Total AS FLOAT) ASC发布于 2011-08-29 14:35:17
示例中的值看起来像是浮点数。所以
1)由于它们都不超过8位,所以可以将其转换为float(53) (大约有15位小数精度),而不会丢失数据。或者转换为decimal(15,7)以完全确定。
2)通常将浮点值作为字符串存储在数据库中是很奇怪的。
发布于 2011-08-29 14:58:23
您可能会丢失转换回浮点型的数据。
所以这里是一个基于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)
   ENDhttps://stackoverflow.com/questions/7226844
复制相似问题