繁体   English   中英

MySQL左键盘和更新

[英]MySQL Left pad and update

我需要保留一个字段,然后将结果另存为新帐号。 我正在尝试找出解决此问题的最佳方法,并且在寻找解决方案时遇到了麻烦。

到目前为止,我已经将来自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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM