我需要向左填充一个字段,然后将结果保存为一个新的帐号。我正在尝试找出最好的方法来解决这个问题,但我在寻找解决方案方面遇到了困难。
到目前为止,我将必要的信息从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));目前,我认为replicate是最好的方式。然而,我在计划用户输入的变化时遇到了麻烦。这需要支持2到6位之间的填充。因此,举个例子:
输入: 1234输出: 001234或0000001234
我可以很容易地解释0是另一个数字,但似乎replicate依赖于固定的长度字段长度。
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;有什么建议吗?肯定有更好的方法来做这件事。
发布于 2014-08-09 05:25:50
我总是这样做的:
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'https://stackoverflow.com/questions/25212469
复制相似问题