首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL左pad和更新

MySQL左pad和更新
EN

Stack Overflow用户
提问于 2014-08-09 05:23:39
回答 1查看 55关注 0票数 0

我需要向左填充一个字段,然后将结果保存为一个新的帐号。我正在尝试找出最好的方法来解决这个问题,但我在寻找解决方案方面遇到了困难。

到目前为止,我将必要的信息从C#传递到一个存储过程中。

代码语言:javascript
复制
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));

目前,我认为replicate是最好的方式。然而,我在计划用户输入的变化时遇到了麻烦。这需要支持2到6位之间的填充。因此,举个例子:

输入: 1234输出: 001234或0000001234

我可以很容易地解释0是另一个数字,但似乎replicate依赖于固定的长度字段长度。

代码语言:javascript
复制
    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;

有什么建议吗?肯定有更好的方法来做这件事。

EN

回答 1

Stack Overflow用户

发布于 2014-08-09 05:25:50

我总是这样做的:

代码语言:javascript
复制
RIGHT(REPLICATE('<padchar>', <length>) + [<field>], <length>)

哪里

  • <padchar>是填充字符(例如,0)
  • <length>是字符串的最终/最大长度)(例如,10)
  • <field>是需要填充的现有字段(例如,Account)

最终的结果是,无论您的输入长度是多少,它总是会产生一个长度为10的字符串。

例如,对于帐户'1234‘,该过程如下所示:

代码语言:javascript
复制
'1234'
RIGHT(REPLICATE('0', 10) + '1234', 10)
RIGHT('0000000000' + '1234', 10)
RIGHT('00000000001234', 10)
'0000001234'

或者是“987654”:

代码语言:javascript
复制
'987654'
RIGHT(REPLICATE('0', 10) + '987654', 10)
RIGHT('0000000000' + '987654', 10)
RIGHT('0000000000987654', 10)
'0000987654'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25212469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档