我有一个表DomainDetail
,其中包含fieldID
列。
它的值为A1,B22,A567,D7779,B86759
..即从两个字符到最多六个字符。
我希望这些值具有相同数量的字符
A000001,B000022,A000567,D07779 and B86759
。
这就是我认为我应该继续的方式
LEN(fieldID)
如何将0夹在原始值中。怎么做SQL?
答案 0 :(得分:4)
select
left(fieldID, 1) +
right('000000' + right(fieldID, len(fieldID) - 1), 5)
from DomainDetail
答案 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