3

我有一个数字如下: 13901210 我希望输出给出以下结果 1390/12/10

输入函数:多个bigint 输出:一个字符串

如何创建此功能?

4

5 回答 5

4

我想知道为什么没有人建议这个简单查询

declare @input bigint=13901210

select REPLACE(Convert(varchar,Convert(date,CONVERT(varchar,@input))),'-','/')

SQL小提琴

于 2013-05-21T12:12:17.050 回答
1
DECLARE @integer int = 13901210;
DECLARE @part1 int = @integer / 10000;
DECLARE @part2 int = (@integer - @integer / 10000 * 10000) / 100;
DECLARE @part3 int = @integer - @integer / 100 * 100;

DECLARE @result char(10) =
   CAST(@part1 AS char(4)) + '/'
 + CAST(@part2 AS char(2)) + '/'
 + CAST(@part3 AS char(2))

SELECT Part1 = @part1, Part2 = @part2, Part3 = @part3, Result = @result;
GO
于 2013-05-22T04:52:14.777 回答
0

如果您不想对值进行子字符串化,则可以执行以下操作:

DECLARE @nbr INT=13901210
SELECT 
    LEFT(@nbr,4)+'/'+
    SUBSTRING(CAST(@nbr AS VARCHAR(10)),5,2)+'/'+
    RIGHT(@nbr,2)

然后函数看起来像这样:

CREATE FUNCTION [dbo].[GetDateFormatForInt] (@nbr int)
RETURNS varchar(10)
AS
BEGIN
RETURN
    LEFT(@nbr,4)+'/'+
    SUBSTRING(CAST(@nbr AS VARCHAR(10)),5,2)+'/'+
    RIGHT(@nbr,2);
END

这仅适用于 10 位数字

于 2012-04-25T06:42:35.320 回答
0

这也适用于我:

    CREATE PROCEDURE getdatestr
    @result nvarchar(12) output,
    @info bigint 
    AS
    BEGIN
    SET @result=(SELECT LEFT(CAST(@info AS VARCHAR(8)),4)+'/'+
    SUBSTRING(CAST(@info AS VARCHAR(8)),5,2)+'/'+
    RIGHT(CAST(@info AS VARCHAR(8)),2))
    RETURN @result
    END
    GO

除了 LEFT、RIGHT 返回 nvarchar 和 SUBSTRING 返回字符串 :) 无论如何尝试它...它提供相同的输出,如果你对它没问题,那么它很容易获得。

于 2012-04-25T06:50:00.100 回答
0

你可以试试这个查询:

SELECT SUBSTRING(CAST(13901210 AS varchar(8)), 1,4) + '/' + SUBSTRING(CAST(13901210 AS varchar(8)), 5,2) + '/' + SUBSTRING(CAST(13901210 AS varchar(8)), 7,2)

只需将值替换为您拥有的任何字段/变量以及存储的数字

完整的功能如下所示:

CREATE FUNCTION [dbo].[int_to_slashed_string] ( @value int )
RETURNS varchar(10)
AS
BEGIN
DECLARE @string varchar(8);
SET @string = CAST(@value AS varchar(8));
RETURN SUBSTRING(@string, 1,4)
    + '/' + SUBSTRING(@string, 5,2)
    + '/' + SUBSTRING(@string, 7,2);
END

此函数假定该值包含 8 位数字。如果有其他限制或条件,则必须修改该功能。

于 2012-04-25T06:31:24.047 回答