2

Ordernumber を NVarChar として格納する Orders テーブルがあります。降順で最大の注文番号を照会し、上位 1 を返し、1 を加算することで、手動で注文番号を増やします。これは Microsoft CRM 4.0 に実装されています。

例: 注文番号 (NVarchar)

99
456
32

上記の値を照会すると、456 ではなく 99 が返されます。SQL Server 2005 で SQL スクリプトを使用して、現在のすべての注文番号を 000099 または 000456 のように埋めたいと考えています。したがって、上記の例は次のようになります。

000099
000456
000032

これを実現するには、どの SQL スクリプトを作成する必要がありますか?

4

5 に答える 5

3

このようにしないでください!値を INT として格納します。文字列を使用すると、ゼロでパディングされて永遠に閉じ込められます。文字列にゼロを格納することにした場合でも、ユーザー入力をゼロで埋めてクエリを実行する必要があります (または、'%'+@x+'%' のように使用します)。

于 2009-07-10T19:13:13.653 に答える
2

私はこれに出くわしたばかりで、かなり前に尋ねられたことを知っていますが、別の、おそらくもっと簡単な解決策を知っているので、共有することにしました.

注: これは、パディングする列に数字のみが含まれている場合にのみ機能します。これは、STR() 関数が最初のパラメーターとして浮動小数点数を取り、文字列が再び長い文字列に変換される前に浮動小数点数に変換されるためです。

基本的に - これ:

SELECT REPLACE(STR('872', 8), ' ', '0')

00000872を出力します

于 2013-01-17T11:35:52.503 に答える
1

NVARCHAR を INT に CAST すると、順序付けが思い通りに機能します。注文番号には数字のみが含まれていると想定しています。

ORDER BY
    CAST(OrderNumber AS INT)
于 2009-07-10T19:17:32.990 に答える
0

これは基本的に pcampbell によって提供された回答を書き直したものですが、他の SQL 製品への移植がより簡単であることがわかった関数を使用しています: etcCASTではなく:CONVERT

SELECT CAST(REVERSE(CAST(REVERSE(CAST(Num AS NVARCHAR(9))) + '000000000' AS NCHAR(9))) AS NVARCHAR(9))
       AS value_padded
 FROM Numbers;
于 2009-07-11T09:31:05.733 に答える