2012-02-06 77 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

相关问题