Как выровнять поле varchar вправо в TSQL? - PullRequest
2 голосов
/ 06 февраля 2012

У меня есть значения типа "11 (пробел)", "109", "X (пробел) (пробел)", "9 (пробел) (пробел)", "15 (пробел)" и т. Д. В столбце с именем MyCode это varchar (3).

Когда я заказываю их, у меня появляется пролабме, подобное 11, перед 109, когда я ЗАКАЗЫВАЮ их в порядке ASC.

Я хочу выровнять значения по правому краю, добавив перед ним пустой символ, чтобы в результате получился ORDER:

 " 11"

 .. 

"109"

Вопрос : Как мне написать свой SELECT MyChar FROM MyTable, чтобы при значении "1 (пробел) (пробел)" он возвращал "(пробел) (пробел) 1" и т. Д.?


@ gbn: Ваш ответ сделал то, что мне было нужно, но результат не изменился:

enter image description here

1 Ответ

2 голосов
/ 06 февраля 2012

Используйте это, чтобы всегда дополнять начальные пробелы до фиксированной длины

SELECT RIGHT(
      SPACE(5) + 
      REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(MyChar), CHAR(160), ''), CHAR(9), ''), CHAR(10), ''), CHAR(13), '')
    , 5) AS Justified
FROM MyTable 
ORDER BY Justified

Если вы измените один 5, вам нужно изменить оба

Редактировать: добавлено RTRIM

Редактировать 2: добавлено жесткое пространство + другое непечатаемое обнаружение

Что это тебе дает?

SELECT ASCII(RIGHT(MyChar, 1) FROM MyTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...