sql server - format a wbs column in sql -
how split format wbs column have prefix of zeroes using sql?
example: 1.2.15 1.002.015
sample wbs column content:
- 1.1 - 1.1.1 - 1.1.2 - 1.1.3 - 1.2
not beautiful code on earth, trick:
declare @str varchar(100) = '1.2.15' declare @format varchar(10) = '000' declare @p1 varchar(10) declare @p2 varchar(10) declare @p3 varchar(10) declare @p4 varchar(10) declare @parts int = 1 + len(@str) - len(replace(@str, '.', '')) select @p1 = parsename(@str, @parts) select @p2 = parsename(@str, @parts - 1) select @p3 = parsename(@str, @parts - 2) select @p4 = parsename(@str, @parts - 3) select @p2 = format(cast(@p2 int), @format) select @p3 = format(cast(@p3 int), @format) select @p4 = format(cast(@p4 int), @format) select isnull(@p1, '') + isnull('.' + @p2, '') + isnull('.' + @p3, '') + isnull('.' + @p4, '') -- output 1.002.015
the key use parsename
function. it's intended parsing qualified sql object name, here use wbs. first find number of points know how many parts has, function's second parameter part counting end. way can main version in @p1
, next 1 in @p2
, etc.
then trick add leading zeroes, , concatenate numbers, avoiding nulling string if 1 of them null.
limitations:
- only 4 parts (can't use 1.2.15.6.3)
- must valid, no spaces , no . @ end
Comments
Post a Comment