2

DomainDetail列を持つテーブルがありますfieldID

..のような値がありA1,B22,A567,D7779,B86759ます。つまり、2文字から最大6文字までです。

これらの値の文字数を同じにしたい A000001,B000022,A000567,D07779 and B86759

これが私が進めるべきだと思う方法です

  • フィールド値の推定サイズ=LEN(fieldID)
  • (6-文字数)に等しい数のゼロを挿入します。

元の値の中に挟まれた0を挿入するにはどうすればよいですか。SQLでどのようにできますか?

4

5 に答える 5

4

このような

select 
    left(fieldID, 1) + 
    right('000000' + right(fieldID, len(fieldID) - 1), 5)
from DomainDetail

SQL FIDDLEの例を見てください

于 2012-11-30T08:19:31.760 に答える
2

これは、ビジネス ロジック、つまりデータベース上のコード レイヤーによって解決されたほうがよい問題のように思えます。挿入するたびに、そのコードでパディングを行います。次に、常にそのコード/レイヤーを使用してテーブルに挿入します。

とにかく、「IDには最大6文字が必要です」というビジネスロジックの要件のようです。データベースはそのような制限を課さないためです。

(ストアド プロシージャをビジネス ロジック レイヤーとして使用している場合を除きますか?その場合、T-SQL の PadLeft 関数)

于 2012-11-30T08:14:29.460 に答える
1
select 
stuff(fieldId,2,0,
      LEFT('0000000000000000000000000',
      (select max(LEN(FieldID)) from DomainDetail)

           -LEN(fieldId)))
from DomainDetail

固定の出力長が必要な場合は、内部選択を置き換えるだけです (select max(LEN(FieldID)) from DomainDetail)たとえば、 SQLFiddle デモ6 は次のとおりです)。

于 2012-11-30T08:18:29.167 に答える
1

UPDATEしたい場合は、これを使用してください

UPDATE DomainDetail
SET fieldId=
            SUBSTRING(fieldId,1,1)+
            REPLICATE('0',6-LEN(id))+
            SUBSTRING(fieldId,2,LEN(id)-1)

テーブルの値を変更せずに SELECT だけを実行したい場合は、これでうまくいくはずです

SELECT SUBSTRING(id,1,1)+
       REPLICATE('0',6-LEN(id))+
       SUBSTRING(id,2,LEN(id)-1) 
FROM DomainDetail

お役に立てれば、

ラージ

于 2012-11-30T08:30:57.217 に答える
1
select stuff(fieldid, 2, 0, replicate('0', 6-len(fieldid))) 
from DomainDetail
于 2012-11-30T08:53:43.737 に答える