どうすればvarcharフィールドをTSQLの右側に揃えることができますか?

MyCodeと呼ばれる列に「11(スペース)」、「109」、「X(スペース)(スペース)」、「9(スペース)(スペース)」、「15 varchar(3)。

私がそれらを注文するとき、私はASCの順序でそれらを注文するとき109の前に11のようなprolbmeを持っています。

ORDERという結果になるように、空のcharを先頭に追加して値を右に揃えたい:

 " 11"

 .. 

"109"

Question: How can I write my SELECT MyChar FROM MyTable so that for a value "1(space)(space)" it should return "(space)(space)1" etc. ?


@gbn:あなたの答えは私が必要としたものでしたが、出力は変わりませんでした:

enter image description here

2
数値をテキストとして保存すると、数値をキャストしない限り、テキストとしてソートされます。
追加された 著者 Andrew Barber,

1 答え

これを使用して常に先頭のスペースを固定長にします

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

1つの 5 を変更する場合は、両方を変更する必要があります

編集:追加されたRTRIM

編集2:ハードスペースの追加+その他の印刷不可能な検出

これはあなたに何を与えるのですか?

SELECT ASCII(RIGHT(MyChar, 1) FROM MyTable
2
追加された
それは "11"の代わりに "11"を作成します。それで私の注文問題を解決するのに役立たない
追加された 著者 pencilCake,
更新gbnありがとうございます!本当に感謝しております。
追加された 著者 pencilCake,
@pencilCake:RTRIMを追加しました
追加された 著者 gbn,
彼らは本当のスペースか "ハードスペース"ですか? (文字160)
追加された 著者 gbn,