我有一个DomainDetail
有列的表fieldID
。
它的值如A1,B22,A567,D7779,B86759
.. 即从两个字符到最多六个字符。
我希望这些值具有相同数量的字符
A000001,B000022,A000567,D07779 and B86759
。
这就是我认为我应该继续的方式
- 估计字段值的大小 =
LEN(fieldID)
- 插入的零数量等于(6 - 字符数)。
如何在 original value 中插入 0。在 SQL 中怎么做?
我有一个DomainDetail
有列的表fieldID
。
它的值如A1,B22,A567,D7779,B86759
.. 即从两个字符到最多六个字符。
我希望这些值具有相同数量的字符
A000001,B000022,A000567,D07779 and B86759
。
这就是我认为我应该继续的方式
LEN(fieldID)
如何在 original value 中插入 0。在 SQL 中怎么做?
像这样
select
left(fieldID, 1) +
right('000000' + right(fieldID, len(fieldID) - 1), 5)
from DomainDetail
这听起来像是业务逻辑更好地解决的问题,即数据库上方的代码层。每当您插入时,请在该代码中进行填充 - 然后始终使用该代码/层插入表中。
无论如何,这似乎是一个业务逻辑要求——“ID 必须最多包含 6 个字符”。因为数据库不会施加这样的限制。
(除非您使用存储过程作为业务逻辑层?在这种情况下,使用 T-SQL 中的 PadLeft 函数)
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
如果要更新,请使用此
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
希望这可以帮助,
拉吉
select stuff(fieldid, 2, 0, replicate('0', 6-len(fieldid)))
from DomainDetail