6

このデータが入力されたという列がありNumberます(列はncharです):

1
2
1091
3
20
2B

この順序を与える select ステートメントが必要です。

1
2
2B
3
20
1091

どうすればこれを達成できますか? 助けてくれてありがとう

(編集済み)

4

3 に答える 3

18

最初の非数値の場所を見つけた後、数値に変換することで、いくつかのトリックを実行できます。最後にランダムな文字を追加すると、元の文字列にアルファベットが含まれていなくても、すべての文字列が同じように扱われます。

SELECT [Number] FROM dbo.TableName 
ORDER BY CONVERT(INT, LEFT(Number, PATINDEX('%[^0-9]%', Number + 'z')-1));
于 2012-09-21T21:08:26.303 に答える
1

PATINDEX を使用して、このSQL Fiddleコードを確認してください。@AaronBertrand は、テスト中に答えました。

いくつかの価値と情報を追加するには、この SQLServerCentral リンクを確認してください。ここでさらに回答を見つけることができます。

Microsoft SQL 2005 のこのNatural (human alpha-numeric) sort を確認してください。多くの有用な回答とバリエーションがあります。

于 2012-09-21T21:15:42.460 に答える
1

あなたが探しているのはNATURAL SORTと呼ばれ、ほとんどのシステムが提供する通常のソートとは異なります。ここ Stack Overflow で、さまざまな一般的な SQL エンジンの自然な並べ替えについて説明している投稿をいくつか見つけましたSQL Server

ここでのアイデアは、解決策を始めるきっかけになるかもしれません。

Oracle: SQL クエリで「自然な」オーダーバイを実装するにはどうすればよいですか?

ただし、SQL エンジンの構文を変更する必要がある場合があります。

MYSQL の別のバージョンが見つかりました:

MySQL の自然な並べ替え

SQL Server 用のものはまだ見つかりません。

編集3

ああ、これはいくつかの SQL Server のアイデアもカバーしています。

MySQL の自然な並べ替え

于 2012-09-21T21:02:50.870 に答える