如何在TSQL中将varchar字段向右对齐?
我在一个名为MyCode的列中有“11(space)”、“109”、“X(space)(space)”、“9(space)(space)”、“15(space)”等值,该列就是varchar(3) 当我按ASC顺序订购时,在109之前会出现一个类似11的序言 我想通过在前面添加空字符将值向右对齐,以便得到以下结果:如何在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:您的回答符
" 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)如果将数字另存为文本,则除非您强制转换数字,否则它们将按文本排序。