2014-12-04 7 views
-1

Если вы запустите указанный ниже запрос в SQL Server 2014, что вы получаете за результат столбца DT? Он должен быть «1», но в SQL Server 2008 я получаю «0».Подтвердить ошибку SQL Server?

SELECT 
    CASE WHEN CAST('2014-01-02 00:00:00.001' AS DATETIME) > CAST('2014-01-02 00:00:00.000' AS DATETIME) THEN 1 ELSE 0 END AS 'DT' 
    , CASE WHEN CAST('2014-01-02 00:00:00.002' AS DATETIME) > CAST('2014-01-02 00:00:00.000' AS DATETIME) THEN 1 ELSE 0 END AS 'DT2' 
    , CASE WHEN '2014-01-02 00:00:00.001' > '2014-01-02 00:00:00.000' THEN 1 ELSE 0 END AS 'VARCHAR' 
+1

Разрешение datetime равно 3.33 миллисекундам –

+1

Вы можете упростить свой запрос, поскольку последние 2 случая не связаны с вашим вопросом. – Raptor

+1

Возьмите домашнюю форму, это не означает, что это ошибка в SQL Server .... –

ответ

4

Разрешение поля времени даты является 3 знаков после запятой. Есть только с точностью до в пределах 3,33 мс

SQL сервера рассмотрим как '2014-01-02 00:00:00.001' и '2014-01-02 00:00:00.000' как 2014-01-02 00:00:00.000.

SELECT Cast('2014-01-02 00:00:00.001' AS DATETIME), 
     Cast('2014-01-02 00:00:00.000' AS DATETIME) 

Результат будет таким же для обеих дат.

В вашем случае заявление CAST('2014-01-02 00:00:00.001' AS DATETIME) > CAST('2014-01-02 00:00:00.000' AS DATETIME) потерпело неудачу, потому что оба равны, так что часть 0 работала.

+0

@MitchWheat - это достаточно, чтобы кто-то понял? –

+0

not my downvote BTW –

+0

@MitchWheat - Не проблема. Я знаю, что это не ваш DV –

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