使用不同值更新多个列

时间:2015-05-26 11:33:46

标签: sql sql-server sql-server-2008

               I have table following this format :

Id   BillNo:      Voucher No:
1   W2015-16/0001  W2015-16/0001
2   W2015-16/0002  W2015-16/0002
3   W2015-16/0003  W2015-16/0003
4   W2015-16/0004  W2015-16/0004
5   W2015-16/0005  W2015-16/0005
6   W2015-16/0006  W2015-16/0006
7   W2015-16/0007  W2015-16/0007
8   W2015-16/0008  W2015-16/0008
9   W2015-16/0009 W2015-16/0009
10   W2015-16/0010  W2015-16/0010

但不是这种格式: 现在我要更新全部"凭证号码"和"比尔否"以下格式:

Id   BillNo:      Voucher No:
1   W0001/2015-16 W0001/2015-16
2   W0002/2015-16 W0002/2015-16
3   W0003/2015-16 W0003/2015-16
4   W0004/2015-16 W0004/2015-16
5   W0005/2015-16 W0005/2015-16
6   W0006/2015-16 W0006/2015-16
7   W0007/2015-16 W0007/2015-16
8   W0008/2015-16 W0008/2015-16
9   W0009/2015-16 W0009/2015-16
10  W0010/2015-16 W0010/2015-16
11  W0011/2015-16 W0011/2015-16
像这样我有1000多条记录我应该更新,但我不知道这可能在较短的时间内完成,请提出你的建议,我是SQL的新手 谢谢你的进步

3 个答案:

答案 0 :(得分:1)

假设所有内容都是固定格式,那么您只需使用update和字符串操作:

update table t
    set billno = left(billno, 1) + right(billno, 4) + '/' + substring(billno, 2, 7),
        VoucherNo = left(VoucherNo, 1) + right(VoucherNo, 4) + '/' + substring(VoucherNo, 2, 7);

答案 1 :(得分:0)

UPDATE YourTable
SET BillNo = SUBSTRING(BillNo,1,1) + SUBSTRING(BillNo,10,4) + '/' + SUBSTRING(BillNo,2,7)
, VoucherNo = SUBSTRING(VoucherNo,1,1) + SUBSTRING(VoucherNo,10,4) + '/' + SUBSTRING(VoucherNo,2,7)

测试:

DECLARE @a NVARCHAR(max) = 'W2015-16/0001' 
SELECT SUBSTRING(@a,1,1) +
SUBSTRING(@a,10,4) + '/' + SUBSTRING(@a,2,7)

答案 2 :(得分:0)

没有直接的方法来实现这一目标。您可能需要在SQL中定义一些模式来替换和播放所有字符串函数。这是

declare @name varchar(50) ='W2015-16/0001';
select SUBSTRING(STUFF(@name,2,0,(SUBSTRING(@name,CHARINDEX('/',@name) + 1,len(@name)) + '/')),0,14)
--W0001/2015-16

这可以为您提供所需的结果。因此,您需要通过ID连接表来将其设置为更新语句。只有当您提供的模式正确时,这才有效。