我需要左键填写一个字段,然后将结果保存为新的帐号。我正在努力找出解决这个问题的最佳方法,并且无法找到解决方案。
到目前为止,我将C#中的必要信息传递给存储过程。
using (var connectionCommand = new SqlCommand("updateNumbers", conn) {CommandType = CommandType.StoredProcedure})
//add input parameters
command.Parameters.Add(new SqlParameter("@proc_dateStart", startDate));
command.Parameters.Add(new SqlParameter("@proc_dateEnd", endDate));
command.Parameters.Add(new SqlParameter("@proc_accountNumber", _accountNumber));
目前我认为复制是最好的解决方法。但是我无法计划用户输入的变化。这需要支持2到6位之间的填充。所以一个例子是:
输入:1234 输出:001234或0000001234
我可以很容易地将0视为另一个数字,但似乎复制依赖于固定长度 - 字段长度。
UPDATE [StatementItem]
SET Account = replicate(@proc_digit, 10 - len(Account) + cast(Account as varchar) as newAccountNumber)
WHERE Account = accountNumber
AND TransactionDate BETWEEN proc_dateStart AND proc_dateEnd;
有什么建议吗?必须有更好的方法来解决这个问题。
答案 0 :(得分:0)
我总是这样做:
RIGHT(REPLICATE('<padchar>', <length>) + [<field>], <length>)
其中
<padchar>
是填充字符(例如0
)<length>
是字符串的最终/最大长度(例如10
)<field>
是需要填充的现有字段(例如Account
)最终效果是,无论您的输入长度是多少,它总是会产生一个长度为10
的字符串。
例如,对于帐户“1234”,流程如下:
'1234'
RIGHT(REPLICATE('0', 10) + '1234', 10)
RIGHT('0000000000' + '1234', 10)
RIGHT('00000000001234', 10)
'0000001234'
或'987654':
'987654'
RIGHT(REPLICATE('0', 10) + '987654', 10)
RIGHT('0000000000' + '987654', 10)
RIGHT('0000000000987654', 10)
'0000987654'