Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在TSQL中将varchar字段向右对齐?_Sql_Sql Server 2008_Tsql - Fatal编程技术网

如何在TSQL中将varchar字段向右对齐?

如何在TSQL中将varchar字段向右对齐?,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我在一个名为MyCode的列中有“11(space)”、“109”、“X(space)(space)”、“9(space)(space)”、“15(space)”等值,该列就是varchar(3) 当我按ASC顺序订购时,在109之前会出现一个类似11的序言 我想通过在前面添加空字符将值向右对齐,以便得到以下结果: " 11" .. "109" 问题:如何从MyTable中写入SELECT MyChar,以便值“1(空格)(空格)”应返回(空格)(空格)1”等 @gbn:您的回答符

我在一个名为MyCode的列中有“11(space)”、“109”、“X(space)(space)”、“9(space)(space)”、“15(space)”等值,该列就是varchar(3)

当我按ASC顺序订购时,在109之前会出现一个类似11的序言

我想通过在前面添加空字符将值向右对齐,以便得到以下结果:

 " 11"

 .. 

"109"
问题:如何从MyTable中写入SELECT MyChar,以便值“1(空格)(空格)”应返回(空格)(空格)1”等


@gbn:您的回答符合我的要求,但输出没有改变:


使用此选项始终将前导空格填充到固定长度

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

它创建“11”而不是“11”。所以它不能帮助我解决排序问题,它们是实空间还是“硬空间”?(字符160)如果将数字另存为文本,则除非您强制转换数字,否则它们将按文本排序。