0

基本的に、値が「ABC001」のSQLでvarcharをインクリメントしたいと思います。

int に 1 を追加するコードがありますが、それを varchar に対して機能させる方法がわかりません。

SELECT
  NXT_NO
FROM
  TABLE

UPDATE
  TABLE
SET
  NXT_NO = NXT_NO + 1

NXT_NO が varchar の場合、インクリメントする簡単な方法はありますか?

私が欲しい:

ABC001 ABC002 ABC003

また、以下と連携する必要があります。

001、A0001、AB00001

4

2 に答える 2

2

さて、あなたは次のようなことができます:

update table
    set nxt_no = left(next_no, 3) +
                  right('0000000' + cast(substring(next_no, 4, 100)+1 as varchar(255)), 4)

私の意見では、少し力ずくです。

ちなみに、ID 列を使用して ID を自動インクリメントすることもできます。その後、固定プレフィックスを前に置きたい場合は、計算列を使用できます。または、ボヘミアンのアドバイスに従って、プレフィックスと番号を別の列に保存します。

于 2013-02-19T20:40:50.957 に答える
1
update 
    [table] 
set [nxt_no] = case when PATINDEX('%[0-9]%', [nxt_no]) > 0 then 
          left([nxt_no], PATINDEX('%[0-9]%', [nxt_no])-1) -- Text part
          + -- concat
          right( REPLICATE('0', LEN([nxt_no]) - PATINDEX('%[0-9]%', [nxt_no])+1) + convert( varchar, convert(int, right([nxt_no], LEN([nxt_no]) - PATINDEX('%[0-9]%', [nxt_no])+1))+1), LEN([nxt_no]) - PATINDEX('%[0-9]%', [nxt_no])+1)
else 
    [nxt_no] end
于 2013-02-19T20:48:45.347 に答える