2013-10-11 4 views
0

У меня есть таблица с датами хранящихся в запятой, отделенную, как показано нижеSQL: Сортировка Ближайшей разделенных запятых даты

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, 

Теперь моя задача сортировать записи с ближайшим первыми, последние даты могут быть проигнорированы. Необходимо сравнить все даты в строке с текущей датой, пожалуйста, предложите, как я могу достичь этого

Заранее спасибо.

Edited

Я за исключением:

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,  
+0

Просьба представить ожидаемый результат для вашего образца данных. – dcp

+0

Также укажите, что вы пробовали до сих пор. – Michael

+0

Почему, почему, зачем вы храните такие данные? –

ответ

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

Смежные вопросы