【问题标题】:Make column values in a table have equal number of characters使表中的列值具有相同数量的字符
【发布时间】:2012-11-30 16:53:43
【问题描述】:

我有一个表DomainDetail 有一个列fieldID

它的值类似于A1,B22,A567,D7779,B86759 .. 即从两个字符到最多六个字符。

我希望这些值具有相同数量的字符 A000001,B000022,A000567,D07779 and B86759.

我认为我应该这样做

  • 估计字段值的大小 = LEN(fieldID)
  • 插入的零数量等于 (6 - 字符数)

如何在 original value 中插入 0。在 SQL 中怎么做?

【问题讨论】:

  • 总是只有一个字符前导吗?我的意思是你会有像 AA1 这样的价值观吗?
  • 不,第一个字符是 ALPHABET ,其余是数字..请帮助..

标签: sql sql-server


【解决方案1】:

喜欢这个

select 
    left(fieldID, 1) + 
    right('000000' + right(fieldID, len(fieldID) - 1), 5)
from DomainDetail

看看SQL FIDDLE example

【讨论】:

    【解决方案2】:

    这听起来像是业务逻辑更好地解决的问题,即数据库上方的代码层。每当您插入时,在该代码中进行填充 - 然后始终使用该代码/层插入表中。

    无论如何,这似乎是一个业务逻辑要求 - “ID 必须最多包含 6 个字符”。因为数据库不会施加这样的限制。

    (除非您使用存储过程作为业务逻辑层?在这种情况下,PadLeft function in T-SQL

    【讨论】:

    • 我无法访问实现业务逻辑的代码,只能访问表格...请帮助
    • 帮助如何?提出建议,然后研究如何进行开发,并为您编写代码?
    【解决方案3】:
    select 
    stuff(fieldId,2,0,
          LEFT('0000000000000000000000000',
          (select max(LEN(FieldID)) from DomainDetail)
    
               -LEN(fieldId)))
    from DomainDetail
    

    如果您需要固定的输出长度,只需将内部选择(select max(LEN(FieldID)) from DomainDetail) 替换为例如 6 这是SQLFiddle demo

    【讨论】:

      【解决方案4】:

      如果你想更新,那么使用这个

      UPDATE DomainDetail
      SET fieldId=
                  SUBSTRING(fieldId,1,1)+
                  REPLICATE('0',6-LEN(id))+
                  SUBSTRING(fieldId,2,LEN(id)-1)
      

      如果您只想 SELECT 而不更改表中的值,那么这应该可以工作

      SELECT SUBSTRING(id,1,1)+
             REPLICATE('0',6-LEN(id))+
             SUBSTRING(id,2,LEN(id)-1) 
      FROM DomainDetail
      

      希望这会有所帮助,

      拉吉

      【讨论】:

        【解决方案5】:
        select stuff(fieldid, 2, 0, replicate('0', 6-len(fieldid))) 
        from DomainDetail
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-12
          • 2022-11-28
          • 1970-01-01
          • 2021-06-17
          • 1970-01-01
          • 2012-03-13
          相关资源
          最近更新 更多