如何在我的数据中添加前导零?

时间:2015-03-10 18:32:57

标签: sql sql-server sql-server-2005

我有一个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语句获取此字段。

实现这一目标的有效方法是什么?

2 个答案:

答案 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;