2015-06-11 4 views
0

Я хочу выбрать все даты из таблицы и хочу найти, если какая-либо дата из таблицы меньше определенной даты или нет.SQL Server хранимая процедура для сравнения дат

Когда я

select DateEntered from Table1 where ID = 4 

Результат:

2015-05-12 06:21:43.600 
2018-07-12 06:21:43.600 

Теперь я хочу вернуться '-1', если любая дата меньше, чем '2015-06-11 06: 21: 43,600' , иначе '1'.

Итак, здесь я должен получить -1.

Как я могу записать эту хранимую процедуру?

+1

Вы смотрели выражение случай в SQL Server? https://msdn.microsoft.com/en-us/library/ms181765.aspx (Подсказка: вам нужно использовать MIN здесь в сочетании с выражением case) –

+0

Вы можете использовать 'MIN()' для окончательного сравнения. –

+1

Вам даже не нужен оператор CASE, так как кажется, что вам просто нужно вернуть скалярное значение, а не набор результатов. Вы можете использовать IF ... ELSE. –

ответ

0
select case 
    when DateEntered < '2015-06-11 06:21:43.600' then '-1' 
    else '1' 
     end 
from Table1 where ID = 4 
+0

Хотя этот ответ, вероятно, правильный и полезный, рекомендуется включить некоторое объяснение вместе с ним, чтобы объяснить, как оно помогает решить проблему. Это становится особенно полезным в будущем, если есть изменения (возможно, не связанные), которые заставляют его перестать работать, и пользователи должны понимать, как он работал. –

0

Если вы хотите, чтобы написать хранимую процедуру, она будет выглядеть примерно так:

USE mydb 
GO 

CREATE Procedure dbo.MyProcedure @CurrentDate Date 
AS 
BEGIN 
SET @CurrentDate = GETDATE() 

SELECT 
CASE 
    WHEN DateEntered < @CurrentDate THEN -1 
    WHEN DateEntered >= @CurrentDate THEN 1 
END AS myvalue 
FROM Table1 
WHERE ID = 4 

END 

GO 
+0

Он хочет только ОДНОГО возвращаемого значения .... –

+1

Я не думаю, что OP в этом вопросе совершенно ясно. До разъяснения это действительный ответ. – SQLHound

+0

IMHO он был очень ясен: «Теперь я хочу вернуть« -1 », если ** любая ** дата меньше» –

0
CREATE PROCEDURE [dbo].[prcName] 
(
    @machineId INT 

) 
AS 
BEGIN 
SELECT 

     Case when CONVERT(VARCHAR(8), M.EndDate, 112)<CONVERT(VARCHAR(8), GETDATE(), 112) then 'InActive' else 'Your Value 1' End as 'Your Value 2' 
FROM [dbo].[MachineUsageCost] M WITH(NOLOCK) 

WHERE (@machineUsageCostId IS NULL OR @machineUsageCostId = MachineUsageCostId) AND [email protected] 
     and M.IsActive=1 
END 
Смежные вопросы