1

次のリンクで説明されているのと同じ問題があります。

SQLで数字を含む文字列列をソートしていますか?

列の先頭と末尾の両方に空白がある数値データを含む文字列列があり、並べ替える必要があります。

私が(MySQLで)見つけた解決策は次のとおりです。

SELECT * 
  FROM data 
 ORDER BY left(st,LOCATE(st,' ')), 
          CAST(SUBSTRING(st,LOCATE(st, ' ')+1) AS SIGNED)

私の質問は、このソリューションが最適であり、Mssql に変換して 100.000 レコードを超えるテーブルで実行した場合に大きな負荷が発生しないかどうかです。

また、私は mssql にあまり詳しくないので、Mssql への変換を提案してください。

ありがとう

4

3 に答える 3

1

上記の MySQL クエリの SQL Server バージョンは次のようになります。

SELECT *
  FROM table1 
 ORDER BY LEFT(name, CHARINDEX(' ', name)),
          CAST(RIGHT(name, LEN(name) - CHARINDEX(' ', name) + 1) AS INT)

これがSQLFiddleのデモです

私たちはあなたのサンプルデータを見たことがありませんが、その列の先頭および/または末尾にスペースがある数値だけがある場合は、次のことができます

SELECT *
  FROM table1
 ORDER BY CAST(name AS INT)

これがSQLFiddleのデモです

于 2013-12-15T07:43:12.800 に答える
0

おそらく定義したインデックスを ORDER BY 句が利用しないという意味で、パフォーマンス上の問題が発生する可能性があります。

私の提案は、その列を 2 つの列に分割し、ORDER BY 句を単純なものに変更することです。

ORDER BY Name1, Name2

アプリケーション コードを変更しないようにするために、計算列を追加できます。

ALTER TABLE <tablename> ADD Name AS Name1 + ' ' + Name2
于 2013-12-15T08:15:21.057 に答える