簡體   English   中英

轉換varchar(8)值並在T-SQL中使用ASC

[英]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

使用CASTCONVERT函數,例如:

select Total from
Table A
Order by CAST(Total as float) ASC

參考: http : //msdn.microsoft.com/en-us/library/ms187928.aspx

除非您希望保留轉換后的值,否則無需將其存儲在臨時表中。 只需將它們轉換以進行排序:

select Total
from [Table A]
order by cast(Total as float)

(升序是默認的排序方式,因此您不必指定它。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM