2

我有一个DomainDetail有列的表fieldID

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

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

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

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

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

4

5 回答 5

4

像这样

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

看一下SQL FIDDLE 示例

于 2012-11-30T08:19:31.760 回答
2

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

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

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

于 2012-11-30T08:14:29.460 回答
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 Here is a SQLFiddle demo

于 2012-11-30T08:18:29.167 回答
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

希望这可以帮助,

拉吉

于 2012-11-30T08:30:57.217 回答
1
select stuff(fieldid, 2, 0, replicate('0', 6-len(fieldid))) 
from DomainDetail
于 2012-11-30T08:53:43.737 回答