我需要左侧填充一个字段,然后将结果保存为新帐号。我正在尝试找出解决此问题的最佳方法,但无法找到解决方案。
到目前为止,我将必要的信息从 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;
有什么建议吗?必须有更好的方法来解决这个问题。
最佳答案
我总是这样做:
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'
关于c# - MySQL左填充和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25212469/