整数が短すぎる可能性があるため、いつでも varchar-column を bigint に変換できます...
select cast([yourvarchar] as BIGINT)
ただし、常にアルファベット文字を気にする必要があります
where ISNUMERIC([yourvarchar] +'e0') = 1
+'e0' はhttp://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/isnumeric-isint-isnumberから取得されます
これはあなたの声明につながるでしょう
SELECT
*
FROM
Table
ORDER BY
ISNUMERIC([yourvarchar] +'e0') DESC
, LEN([yourvarchar]) ASC
最初の並べ替え列は数値を一番上に置きます。2 番目は長さでソートされるため、10 が 0001 の前になります (これはばかげている?!)
これは 2 番目のバージョンにつながります。
SELECT
*
FROM
Table
ORDER BY
ISNUMERIC([yourvarchar] +'e0') DESC
, RIGHT('00000000000000000000'+[yourvarchar], 20) ASC
2 番目の列は '0' で正しくパディングされるようになったため、自然な並べ替えでは整数が先行ゼロ (0,01,10,0100...) で正しい順序で配置されます (正しい!) - ただし、すべてのアルファは '0' で拡張されます。 -chars (パフォーマンス)
3番目のバージョン:
SELECT
*
FROM
Table
ORDER BY
ISNUMERIC([yourvarchar] +'e0') DESC
, CASE WHEN ISNUMERIC([yourvarchar] +'e0') = 1
THEN RIGHT('00000000000000000000' + [yourvarchar], 20) ASC
ELSE LTRIM(RTRIM([yourvarchar]))
END ASC
現在、数字は最初に「0」文字で埋められます (もちろん、長さ 20 を拡張することができます) - これは数字を正しく並べ替えます - そしてアルファのみがトリミングされます