[英]convert varchar(8) values and use ASC in T-SQL
我在下表中的表格中有一個數據,它是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或升序顯示它們? 任何人?
您可以像這樣轉換值。
SELECT
Total
FROM Table A
ORDER BY CAST(Total AS FLOAT) ASC
您的示例中的值看起來像浮點數。 所以
1)由於它們的位數都不超過8位,因此可以將其強制轉換為float(53)(精度為15位十進制數字),而不會丟失數據。 或完全確定為小數(15,7)。
2)通常,將浮點值作為字符串存儲在數據庫中很奇怪。
您可能會丟失將數據轉換回float的數據。
所以這是一個基於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
使用CAST
或CONVERT
函數,例如:
select Total from
Table A
Order by CAST(Total as float) ASC
除非您希望保留轉換后的值,否則無需將其存儲在臨時表中。 只需將它們轉換以進行排序:
select Total
from [Table A]
order by cast(Total as float)
(升序是默認的排序方式,因此您不必指定它。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.