我有一个varchar列,其中包含以下数据的变体:
WKKT-FM, 2/21
WKKT-FM, 1/24-2/14
WKKT-FM, 3/14-3/21, 4/11-4/18
IKKT-FM, 12/29-1/12, 1/26-2/09, 6/01-6/15
等等。我需要在几天和几个月前放置前导零。正如你所看到的,其中一些已经有前导零。
我尝试寻找#/或 - #,但我必须考虑一些已经领先零的值。
函数会更好,因为我必须通过SELECT语句获取此字段。
实现这一目标的有效方法是什么?
答案 0 :(得分:2)
这很难看,但应该有用。
CREATE FUNCTION udf_AddMissingZero
(
@val NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
SELECT @val = @val + ' ',
@val = REPLACE(@val, ' 1/', ' 01/'),
@val = REPLACE(@val, ' 2/', ' 02/'),
@val = REPLACE(@val, ' 3/', ' 03/'),
@val = REPLACE(@val, ' 4/', ' 04/'),
@val = REPLACE(@val, ' 5/', ' 05/'),
@val = REPLACE(@val, ' 6/', ' 06/'),
@val = REPLACE(@val, ' 7/', ' 07/'),
@val = REPLACE(@val, ' 8/', ' 08/'),
@val = REPLACE(@val, ' 9/', ' 09/'),
@val = REPLACE(@val, ' 1-', ' 01-'),
@val = REPLACE(@val, ' 2-', ' 02-'),
@val = REPLACE(@val, ' 3-', ' 03-'),
@val = REPLACE(@val, ' 4-', ' 04-'),
@val = REPLACE(@val, ' 5-', ' 05-'),
@val = REPLACE(@val, ' 6-', ' 06-'),
@val = REPLACE(@val, ' 7-', ' 07-'),
@val = REPLACE(@val, ' 8-', ' 08-'),
@val = REPLACE(@val, ' 9-', ' 09-'),
@val = REPLACE(@val, '-1/', '-01/'),
@val = REPLACE(@val, '-2/', '-02/'),
@val = REPLACE(@val, '-3/', '-03/'),
@val = REPLACE(@val, '-4/', '-04/'),
@val = REPLACE(@val, '-5/', '-05/'),
@val = REPLACE(@val, '-6/', '-06/'),
@val = REPLACE(@val, '-7/', '-07/'),
@val = REPLACE(@val, '-8/', '-08/'),
@val = REPLACE(@val, '-9/', '-09/'),
@val = REPLACE(@val, '-1-', '-01-'),
@val = REPLACE(@val, '-2-', '-02-'),
@val = REPLACE(@val, '-3-', '-03-'),
@val = REPLACE(@val, '-4-', '-04-'),
@val = REPLACE(@val, '-5-', '-05-'),
@val = REPLACE(@val, '-6-', '-06-'),
@val = REPLACE(@val, '-7-', '-07-'),
@val = REPLACE(@val, '-8-', '-08-'),
@val = REPLACE(@val, '-9-', '-09-'),
@val = REPLACE(@val, '/1/', '/01/'),
@val = REPLACE(@val, '/2/', '/02/'),
@val = REPLACE(@val, '/3/', '/03/'),
@val = REPLACE(@val, '/4/', '/04/'),
@val = REPLACE(@val, '/5/', '/05/'),
@val = REPLACE(@val, '/6/', '/06/'),
@val = REPLACE(@val, '/7/', '/07/'),
@val = REPLACE(@val, '/8/', '/08/'),
@val = REPLACE(@val, '/9/', '/09/'),
@val = REPLACE(@val, '/1-', '/01-'),
@val = REPLACE(@val, '/2-', '/02-'),
@val = REPLACE(@val, '/3-', '/03-'),
@val = REPLACE(@val, '/4-', '/04-'),
@val = REPLACE(@val, '/5-', '/05-'),
@val = REPLACE(@val, '/6-', '/06-'),
@val = REPLACE(@val, '/7-', '/07-'),
@val = REPLACE(@val, '/8-', '/08-'),
@val = REPLACE(@val, '/9-', '/09-'),
@val = REPLACE(@val, '/1 ', '/01 '),
@val = REPLACE(@val, '/2 ', '/02 '),
@val = REPLACE(@val, '/3 ', '/03 '),
@val = REPLACE(@val, '/4 ', '/04 '),
@val = REPLACE(@val, '/5 ', '/05 '),
@val = REPLACE(@val, '/6 ', '/06 '),
@val = REPLACE(@val, '/7 ', '/07 '),
@val = REPLACE(@val, '/8 ', '/08 '),
@val = REPLACE(@val, '/9 ', '/09 ')
RETURN Rtrim(@val)
END
GO
答案 1 :(得分:1)
这是一个将接受一个字符串的函数,并返回带有左边填充零的单个数字
CREATE FUNCTION PadNumberLeft (@WrkInfo VARCHAR(50))
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @OutputData VARCHAR(25) = ''
DECLARE @iCount INT = 1
WHILE @iCount <= LEN(@WrkInfo)
BEGIN
IF ISNUMERIC(SUBSTRING(@WrkInfo, @iCount, 1)) = 1 AND
ISNUMERIC(SUBSTRING(@WrkInfo, @iCount + 1, 1)) = 1
BEGIN
SET @OutputData = @OutputData + SUBSTRING(@WrkInfo, @iCount, 3)
SET @iCount = @iCount + 3
END
IF ISNUMERIC(SUBSTRING(@WrkInfo, @iCount, 1)) = 1 AND
ISNUMERIC(SUBSTRING(@WrkInfo, @iCount + 1, 1)) = 0
BEGIN
SET @OutputData = @OutputData + '0' + SUBSTRING(@WrkInfo, @iCount, 2)
SET @iCount = @iCount + 1
END
SET @iCount = @iCount + 1
END
RETURN @OutputData
END;