0

以下のようにカンマで区切られた日付が格納されたテーブルがあります

9/30/2013,9/17/2013,10/16/2013,
5/27/2013, 9/30/2013,
09/24/2013,09/27/2013,
09/13/2013,11/18/2013,
09/11/2013,09/13/2013,
12/27/2013,12/20/2013,
12/27/2013,12/20/2013,12/13/2013,12/6/2013,11/29/2013,
10/3/2013,10/10/2013,10/17/2013,10/24/2013,10/31/2013,
10/31/2013,10/24/2013,10/17/2013,10/10/2013,10/3/2013,

今、私の仕事は、最も近い最初のレコードをソートすることです。過去の日付は無視できます。行内のすべての日付を現在の日付と比較する必要があります。これを達成する方法を提案してください

前もって感謝します。

編集済み

私は例外です:

9/30/2013,9/17/2013,10/16/2013, as 10/16/2013 is nearest of all
10/3/2013,10/10/2013,10/17/2013,10/24/2013,10/31/2013, as 10/17/2013 next nearest
10/31/2013,10/24/2013,10/17/2013,10/10/2013,10/3/2013,
12/27/2013,12/20/2013,12/13/2013,12/6/2013,11/29/2013,
12/27/2013,12/20/2013,    
4

1 に答える 1

0

文字列を日付のテーブルに変換する udf は次のとおりです。

CREATE FUNCTION [dbo].[udf_ConvertCSVStringToDateTable] 
(
    @CSVString varchar(max)
)
RETURNS 
@DateTable TABLE 
(
    [Date] DATETIME
)
AS
BEGIN
    DECLARE @ListSize BIGINT
    DECLARE @FoundIndex BIGINT
    DECLARE @Date INT
    DECLARE @DateString VARCHAR(10)

    SET @ListSize = LEN(@CSVString)

    WHILE(@ListSize > 0)
    BEGIN
        SET @FoundIndex = CHARINDEX(',', @CSVString)

        IF(@FoundIndex = 0)
        BEGIN
            SET @DateString = @CSVString
            SET @CSVString = ''
        END
        ELSE
        BEGIN
            SET @DateString = SUBSTRING(@CSVString, 1, @FoundIndex - 1)
            SET @CSVString = SUBSTRING(@CSVString, @FoundIndex + 1, @ListSize) 
        END

        IF(ISDATE(@DateString) = 1)
        BEGIN
            INSERT @DateTable([Date]) VALUES (CONVERT(DATETIME, @DateString))
        END

        SET @ListSize = LEN(@CSVString)
    END
    RETURN 
END

WHEREそこから、句または句を使用して注文を使用ORDER BYして選択およびフィルタリングを実行できるはずです

于 2013-10-11T22:21:11.580 に答える