c# - MySQL左填充和更新

标签 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;

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

最佳答案

我总是这样做:

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/

相关文章:

c# - 当 ToString ("0.0") 以 Razor 形式使用整数时,显示整数而不是小数

c# - C#中单选按钮事件的顺序

c# - 如果数量在阈值内,则捕捉到角度

php - 具有 session 值的绘画表

java - 从mysql中的相关表中选择值

mysql - 多个同时连接 DotNetCore

c# - 使用泛型检查默认值

c# - 设置 ASP.NET (4.0) 列表框的宽度和高度以适合项目

mysql - 如果绑定(bind)字段为空,如何使用左连接发出请求 |数据库

php - 限制提交表格的日期