2016-01-25 3 views
0

У меня есть имя столбца Endtime типа nvarchar(50) и я пытаюсь получить max(Endtime), используя приведенный ниже запрос:Max (дата) не работает для NVARCHAR в SQL Server

select COALESCE(CONVERT(nVARCHAR(50), MAX(EndTime), 103), '-') AS EndTime from dbo.vwJobHistory 

Результаты хороши, пока так как Год тот же (12/31/2015), но как только я поместил некоторые данные с годом (01/22/2016), запрос все еще показывает Макс. Дата 2015 года, а не 2016.

Я пробовал Max(cast(endtime as DateTime)), но это также дает ошибку преобразования Как это можно решить? Заранее спасибо.

+0

MAX следует применять к DATE не для NVARCHAR –

+0

Переместить 'MAX' перед' CONVERT'. Если у вас есть способность изменить тип вашего столбца «Endtime» соответствующим образом. –

+0

@Adriano Я использовал MAX с самой датой .. – Emma

ответ

0

Я не могу найти ошибку в вашем выше запросе, но вот альтернативный способ, как вы могли бы написать запрос:

select top 1 COALESCE(CONVERT(nVARCHAR(50), EndTime, 103), '-') AS EndTime 
from dbo.vwJobHistory 
order by endtime desc 

Update 1 (уточнение структуры таблицы):

В настоящее время неясно, хранятся ли ваши данные datetime в поле nvarchar (50) или если вы хотите, чтобы данные вашего дня и времени были переданы как nvarchar (50). Можете ли вы запустить следующий запрос и обновить свой вопрос с помощью результата?

SELECT 
COLUMN_NAME, DATA_TYPE, col.CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS col WHERE TABLE_NAME LIKE 'vwJobHistory' 

Не могли бы вы также разместить ряд образцов из таблицы с помощью

SELECT endtime FROM dbo.vwJobHistory 

Update 2 (преобразовать строку в DateTime, применять сортировку по конвертируется поле)

Взятые из ваш комментарий, кажется, ваши строки даты хранятся в формате SQL 109, поэтому давайте попробуем преобразовать nvarchar обратно в datetime, применить сортировку к нему и вывести результат:

SELECT * FROM (
    SELECT 
    convert(datetime, EndTime, 109) endtimeconverted, 
    * 
    FROM vwJobHistory 
) xyz 
ORDER BY endtimeconverted DESC 
+0

Я возвращаю то же значение 12 31 2015 1: 02: 07: 000AM. Но предполагается вернуть последнюю дату i.e 01/25/2016 – Emma

+0

Я предполагаю, что что-то не так с вашими данными в вашей таблице vwJobHistory, то есть данные с датой 2016 еще не были зафиксированы. Сколько строк содержится в вашей таблице? – SaschaM78

+0

Таблица содержит около 1715 строк. – Emma

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