MySQL左键盘并更新

时间:2014-08-08 21:23:39

标签: c# mysql

我需要左键填写一个字段,然后将结果保存为新的帐号。我正在努力找出解决这个问题的最佳方法,并且无法找到解决方案。

到目前为止,我将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;

有什么建议吗?必须有更好的方法来解决这个问题。

1 个答案:

答案 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'