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;
有什么建议吗?一定有更好的办法。
我总是这样做:
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'