1


1

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スクリプトを書く必要がありますか?

5 回答


11


これが LessThanDotにある素晴らしいパディングチュートリアルです。

DECLARE @番号テーブル(Num INT)

INSERT @Numbers VALUES( '1')INSERT @Numbers VALUES( '12')INSERT @Numbers VALUES( '123')INSERT @Numbers VALUES( '1234')INSERT @Numbers VALUES( '12345')INSERT @Numbers VALUES( '12' '123456')INSERT @Numbers VALUES( '1234567')INSERT @Numbers VALUES( '12345678')

SELECT NIGHT(REPLICATE( '0'、8)CONVERT(NVARCHAR(8)、Num)、8)から@Numbers

これは次のようになります。

00000001 00000012 00000123 00001234 00012345 00123456 01234567 12345678


3


*このようにしないでください*値をINTとして格納します。 あなたが文字列を使うなら、あなたは永遠にゼロで埋め尽くされるでしょう。 あなたが文字列にゼロを格納することにした場合、あなたはそれを問い合わせるためにユーザー入力をゼロで埋める必要があります(あるいは '%' @x '%'のように使います、いいね!)


1


NVARCHARをINTにキャストすれば、順序どおりに動作します。 注文番号には数字しか含まれていないと思います。

CASTによる注文(OrderNumber AS INT)


1


私はちょうどこれにつまずいた、そして私はそれがかなり前に頼まれたことを知っている、しかし私は私が違う、おそらくもっと簡単な解決策を知っているので、私は共有することにした。

*注意:これはあなたがパディングしたいカラムが数字のみを含んでいる場合にのみ有効です。 これは、STR()関数が最初のパラメーターとして浮動小数点数を取り、さらに長いストリングに変換する前に、ストリングがすべて浮動小数点数に変換されるためです。

基本的に - これ:

SELECT REPLACE(STR( '872'、8)、 ''、 '0')
  • 00000872 *を出力します


0


これは基本的にpcampbellによって与えられた答えを書き直したものですが、他のSQL製品への移植をより簡単に見つけた関数を使用しています: + CONVERT +`などではなく `+ CAST +

SELECT CAST(REVERSE(CAST(REVERSE(CAST(Num AS NVARCHAR(9))) + '000000000' AS NCHAR(9))) AS NVARCHAR(9))
       AS value_padded
 FROM Numbers;