Преобразование Varchar в сравнение даты и даты - PullRequest
0 голосов
/ 14 ноября 2018

Я конвертирую два столбца «Дата», чтобы найти самый последний.

SELECT ISNULL(CONVERT(varchar(10),REPLACE('10-07-2015','/','-'), 103),'01-01-1900'),
ISNULL(CONVERT(varchar(10),REPLACE('10/7/2015','/','-'), 103),'01-01-1900'),
     CASE 
        WHEN ISNULL(CONVERT(varchar,REPLACE('10-07-2015','/','-'), 103),'01-01-1900') = ISNULL(CONVERT(varchar,REPLACE('10/7/2015','/','-'), 103),'01-01-1900')
          THEN '10-07-2015'
    END

Моя проблема в том, что в некоторых датах отсутствует ведущий ноль в Дне или Месяце, и сравнение дает ложные результаты.Есть ли лучший способ справиться с этим?Другая проблема заключается в том, что в одном столбце есть дата с «/», а в другом - «-»

В настоящее время дело проверяется только на «=», но добавится еще, чтобы получить самую последнюю

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете просто преобразовать эти 2 архива в тип DATE, а затем сравнить их.

Вы можете найти стили даты / даты и времени здесь

Для этих меток даты ДД / ММ / ГГГГ подойдет стиль 103.

И для расчетасамое последнее между ними, просто оберните его в CASE.

Пример фрагмента:

declare @T table (
  id int identity(1,1) primary key, 
  datestamp1 varchar(10), 
  datestamp2 varchar(10)
);

insert into @T (datestamp1, datestamp2) values 
 ('5/9/2018','17/9/2018')
,('9-10-2018','16-10-2018')
,('15-10-2018','13-10-2018')
;

SELECT *,
TRY_CONVERT(DATE, datestamp1, 103) as date1, 
TRY_CONVERT(DATE, datestamp2, 103) as date2,
CASE 
WHEN TRY_CONVERT(DATE, datestamp1, 103) >= TRY_CONVERT(DATE, datestamp2, 103) THEN datestamp1
WHEN TRY_CONVERT(DATE, datestamp2, 103) IS NULL THEN datestamp1
ELSE datestamp2
END AS MostRecentDatestamp
FROM @T;

Возвращает:

id  datestamp1  datestamp2  date1       date2       MostRecentDatestamp
1   5/9/2018    17/9/2018   2018-09-05  2018-09-17  17/9/2018
2   9-10-2018   16-10-2018  2018-10-09  2018-10-16  16-10-2018
3   15-10-2018  13-10-2018  2018-10-15  2018-10-13  15-10-2018
...