2012-02-06 79 views
2

我在名爲MyCode的列中具有諸如「11(空格)」,「109」,「X(空格)(空格)」,「9(空格)(空格)」,「15(空格)」等的值那就是varchar(3)。如何在TSQL中將varchar字段與右邊對齊?

當我命令它們時,我有一個像11一樣的前綴出現在109之前,當我按照ASC順序對它們進行排序時。

我希望通過添加在前面空字符對齊值權利,使這種命令將導致:

" 11" 

.. 

"109" 

問題:我怎麼能寫我的SELECT MyChar從MyTable的,這樣的價值「 1(空格)(空格)「應該返回」(空格)(空格)1「等?


@gbn:你的回答做了什麼,我需要的,但輸出沒有改變:

enter image description here

+0

如果您將數字保存爲文本,則會將其排序爲文本,除非您投射它們。 – 2012-02-06 16:44:36

回答

2

使用此總是墊有前導空格爲固定長度

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 
+0

它創建「11」而不是「11」。所以它不幫助我解決我的訂購問題 – pencilCake 2012-02-06 15:28:06

+0

@pencilCake:添加RTRIM – gbn 2012-02-06 15:42:19

+0

它們是真實空間還是「硬空間」? (字符160) – gbn 2012-02-06 16:19:37

相關問題