2014-02-03 3 views
0

Я пытаюсь сравнить 2 разных формата даты из 2 таблиц, чтобы найти различия.Сравните Varchar с datetime

  • ListUsersFullInfo имеет DisableDate как 12/31/2014 (varchar)
  • UsersTable имеет EndDate как 2014-12-31 00:00:00.000 (datetime)

Я попробовал этот запрос, но он не работает:

SELECT 
    distinct g.[Global User Name], n.EndDate, 'eTDisableDate' 
FROM 
    ListUsersFullInfo g 
INNER JOIN 
    UsersTable n ON (n.Empid = g.[Employee ID]) 
WHERE 
    CONVERT (varchar, (n.EndDate), 101) <> g.DisableDate 

Любой Помогите?

+1

Если вы просто хотите протестировать неравенство, тогда преобразуйте оба значения в 'date' или' varchar', а затем сравните. – user2989408

ответ

3

Дата имеет более высокий приоритет, преобразует varchar в дату.

WHERE CONVERT(DATETIME, g.DisableDate, 101) <> n.EndDate 
+0

Что вы подразумеваете под: более высокий приоритет? Спасибо – w0051977

+0

SQL ранжирует datatypes datetime, являясь одним из самых высоких ... т. Е. Когда есть сравнение, которое будет сделано, SQL неявно попытается преобразовать меньшее приоритетное значение в более высокое, чтобы провести сравнение. Дополнительная информация здесь: http://blog.sqlauthority.com/2010/10/08/sql-server-simple-explanation-of-data-type-precedence/ – metaDNA

+0

Я получаю эту ошибку при использовании этого предложения where: преобразование типа данных varchar в тип данных даты и времени приводило к значению вне диапазона. – user2296463

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