使表中的列值具有相同的字符数

时间:2012-11-30 08:08:27

标签: sql sql-server

我有一个表DomainDetail,其中包含fieldID列。

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

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

这就是我认为我应该继续的方式

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

如何将0夹在原始值中。怎么做SQL?

5 个答案:

答案 0 :(得分:4)

像这样

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

看看SQL FIDDLE example

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

如果您想更新,请使用此

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

希望这有帮助,

拉​​吉

答案 4 :(得分:1)

select stuff(fieldid, 2, 0, replicate('0', 6-len(fieldid))) 
from DomainDetail