4

SQL Server 2008 を使用しています。

タイプの列を持つテーブルがありますVarChar。現在、実際に数値を表す文字列で満たされています。残念ながら、列はそのままにしておく必要がありますVarChar ('1', '2' ... , '1000' )

そのフィールドに最大数の値を照会したいのですが、これはVarChar自然順序の最大値ではなく、辞書編集の最大値を取得するためです。

そのクエリの句を使用してこれを解決し、このリンクCOLLATEのような数値の自然順序を提供する照合に変更しようと思いました

  1. SQL Server 2008 にこのような照合はありますか?もしそうなら、クエリは何ですか?
  2. このような照合が存在する場合、このメソッドを使用する必要がありますか、それともキャストを使用する必要がありますか?

ありがとう。

4

3 に答える 3

2

3 番目のオプションは、永続化された計算列を使用することです。これは、数値にキャストされた値です。

そうすれば、作成時または更新時に一度だけキャストされます

-- Create Table with computed column
CREATE TABLE [dbo].[CCtest]
(
[myString] [varchar] NULL,
[myInt] AS (cast(myString as int)) PERSISTED
)
GO

その後、計算列にインデックスを作成しても問題ありません。

于 2013-06-05T09:21:00.487 に答える
2

すべての値が数値である場合は、int に変換された値で単純に並べ替えることができ、照合やテーブル構造を変更する必要はありません。

SELECT * FROM test ORDER BY CONVERT(INT, value);

でテストする SQLfiddle

于 2013-06-05T09:23:40.580 に答える