MySQL左垫和更新

本文关键字:更新 MySQL | 更新日期: 2023-09-27 18:17:06

我需要左pad一个字段,然后将结果保存为新帐号。

我正在想办法解决这件事,但是找不到解决办法。 到目前为止,我将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;

有什么建议吗?一定有更好的办法。

MySQL左垫和更新

我总是这样做:

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'

Or for '987654':

'987654'
RIGHT(REPLICATE('0', 10) + '987654', 10)
RIGHT('0000000000' + '987654', 10)
RIGHT('0000000000987654', 10)
'0000987654'