2015-05-28 3 views
3

Мне нужно передать значение ниже по течению от базы данных SQL Server, которая по существу является разницей между двумя timestamps. Это достаточно просто с функцией DATEDIFF.SQL - DATEDIFF с подзапросом

SELECT DATEDIFF(day, '2015-11-06 00:00:00.000','2015-12-25 00:00:00.000') AS DiffDate ; 

Однако во время передачи значения вниз код знает только идентификатор заказа, а не 2 метки времени, показанные выше. Поэтому мне нужна информация timestamp, чтобы получить из подзапроса или что-то еще, что я думаю. Основные гайки и болты подзапросом здесь:

select O.DATE1 , C.DATE2 
from TABLE1 O, TABLE2 C 
WHERE O.VALUE1_ID = C.VALUE1 
AND O.order_id = '12345678' 

Я попробовал несколько различных способов, однако ни один не был sucesfull. Последний Я устал ниже, что с точки зрения синтаксиса выглядит хорошо, но я получаю сообщение об ошибке:

Conversion failed when converting date and/or time from character string

, который я никогда не слишком уверен, как справиться или иметь дело с.

select DATEDIFF (day,'(select O.VALUE1 
from TABLE1 O 
where O.VALUE1 = 16650476)' , 
       '(SELECT C.VALUE1 
       from TABLE1 O, TABLE2 C 
       WHERE O.VALUE1 = C.VALUE2 AND O.order_id = 12345678)') AS DIFFDATE; 

Любые указатели или помощь будут оценены.

+0

Пожалуйста, отредактируйте ваш вопрос с данными примера и желаемыми результатами. Образцы кода действительно не помогают передать то, что вы пытаетесь сделать. –

+0

.. желательно с помощью операторов ddl + dml для данных образца, чтобы мы могли [скриптировать] (http://sqlfiddle.com/). –

ответ

2

Подзапросы не должны быть строками, поэтому удалите одинарные кавычки. Кроме того, вы говорите abot O.DATE1 и C.DATE2, поэтому вы, вероятно, имеете в виду что-то вроде этого:

select DATEDIFF (day, 
       (select O.DATE1 
       from TABLE1 O 
       where O.VALUE1 = 16650476) , 
       (SELECT C.DATE2 
       from TABLE1 O, TABLE2 C 
       WHERE O.VALUE1 = C.VALUE2 AND O.order_id = 12345678)) AS DIFFDATE; 
0

Я думаю, что вы хотите следующее:

SELECT DATEDIFF(DAY, cj.SomeDateColumn, C.SomeDateColumn) 
FROM TABLE1 O 
JOIN TABLE2 C ON O.VALUE1 = C.VALUE2 
CROSS JOIN (SELECT O.SomeDateColumn FROM TABLE1 WHERE order_id = 16650476) cj 
WHERE O.order_id = 12345678 
+1

Привет всем, оцените все отзывы, извините, если кто-то не понял, Клас указал на то, что было действительно очевидно, и, похоже, он исправил мой запрос. – pegzy

0

Не могли бы вы Объявляются две переменные DateTime и затем DateDiff двух переменных?

DECLARE @FirstDate AS datetime 
DECLARE @SecondDate AS datetime 
SET @FirstDate = (select O.VALUE1 from TABLE1 O where O.VALUE1 = 16650476) 
SET @SecondDate = (SELECT C.VALUE1 from TABLE1 O, TABLE2 C WHERE O.VALUE1 = C.VALUE2 AND O.order_id = 12345678) 
SELECT DATEDIFF(day, @FirstDate, @SecondDate) 
0

Не могли бы вы попробовать ниже я использовал свой суб запрос, но более подробную информацию о данных в таблицах «Table1» и «TABLE2» было бы полезно

SELECT 
    DATEDIFF(day, D.Date1, D.Date2) AS DiffDate 
FROM 
(
    select O.DATE1 as Date1 , C.DATE2 as Date2 
    from TABLE1 O, TABLE2 C 
    WHERE O.VALUE1_ID = C.VALUE1 
    AND O.order_id = '12345678' 
) D 

Причина вы получаете ошибка

Conversion failed when converting date and/or time from character string

потому, что вы передаете строки (ниже) к функции DATEDIFF вместо даты

'(select O.VALUE1 
from TABLE1 O 
where O.VALUE1 = 16650476)'