конвертировать значения varchar (8) и использовать ASC в T-SQL - PullRequest
1 голос
/ 29 августа 2011

У меня есть данные в таблице в форме ниже, и это в типе данных varchar (8)

Total

100
101
104.5
88
1038
64
108.3
10872
900

Мне нравится использовать ASC в T-SQL, чтобы я мог отображать его в порядке возрастания, однако я не может сделать это как в varchar (8) форме

Например

select Total from
Table A
Order by Total ASC

Как сначала добавить эти значения во временную временную таблицу? и как преобразовать эти значения varchar (8) и во что? чтобы Вы можете отобразить их в ASC или в порядке возрастания, используя запрос T-SQL? Кто-нибудь?

Ответы [ 5 ]

1 голос
/ 29 августа 2011

Вы можете потерять данные, конвертируемые обратно в плавающее.

Итак, вот сортировка на основе 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
1 голос
/ 29 августа 2011

Значения из вашего примера выглядят как числа с плавающей точкой.Итак,

1) Поскольку все они имеют не более 8 цифр, вы можете привести их к float (53) (с точностью около 15 десятичных цифр) без потери данных.Или до десятичной (15,7), чтобы быть полностью уверенным.

2) Обычно странно хранить значения с плавающей запятой в виде строк в базе данных.

1 голос
/ 29 августа 2011

Вы можете разыграть это значение следующим образом.

SELECT 
    Total 
FROM Table A
ORDER BY CAST(Total AS FLOAT) ASC
0 голосов
/ 29 августа 2011

Если вы не хотите сохранять преобразованные значения, вам не нужно сохранять их во временной таблице.Просто конвертируйте их для сортировки:

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

(сортировка по умолчанию - сортировка по возрастанию, поэтому указывать ее не нужно).

0 голосов
/ 29 августа 2011

Используйте функции CAST или CONVERT, например:

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

Ссылка: http://msdn.microsoft.com/en-us/library/ms187928.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...