T-sql IF Оценка состояния условия - PullRequest
0 голосов
/ 05 марта 2012

У меня простой вопрос относительно T-SQL. У меня есть хранимая процедура, которая вызывает функцию, которая возвращает дату. Я хочу использовать условие IF для сравнения текущей даты с датой возврата функций. Если true, чтобы вернуть данные.

Любые идеи о лучшем способе справиться с этим. Сейчас я изучаю t-sql, и я больше знаком с логическими условиями использования C #.

ALTER FUNCTION [dbo].[monday_new_period](@p_date as datetime) -- Parameter to find current date
RETURNS datetime
BEGIN 

-- 1 find the year and period given the current date

-- create parameters to store period and year of given date
declare @p_date_period int, @p_date_period_year int

-- assign the values to the period and year parameters
select 
@p_date_period=period, 
@p_date_period_year = [year] 
from client_week_uk where @p_date between start_dt and end_dt

-- 2 determine the first monday given the period and year, by adding days to the first day of the period
-- this only works on the assumption a period lasts a least one week

-- create parameter to store the first day of the period
declare @p_start_date_for_period_x datetime
select @p_start_date_for_period_x = min(start_dt)
from client_week_uk where period = @p_date_period and [year] = @p_date_period_year

-- create parameter to store result
declare @p_result datetime

-- add x days to the first day to get a monday
select @p_result = dateadd(d, 
    case datename(dw, @p_start_date_for_period_x) 
        when 'Monday' then 0
        when 'Tuesday' then 6
        when 'Wednesday' then 5
        when 'Thursday' then 4
        when 'Friday' then 3
        when 'Saturday' then 2
        when 'Sunday' then 1 end,
    @p_start_date_for_period_x)

Return @p_result
END

ALTER PROCEDURE [dbo].[usp_data_to_retrieve]
-- Add the parameters for the stored procedure here

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

IF monday_new_period(dbo.trimdate(getutcdate()) = getutcdate()

BEGIN

-- SQL GOES HERE --

END

Спасибо !!

Ответы [ 2 ]

2 голосов
/ 05 марта 2012

Полагаю, вы работаете над Sql2008.Для получения дополнительной информации см. Документацию по ключевым словам IF и CASE .

CREATE FUNCTION dbo.GetSomeDate()
RETURNS datetime
AS
BEGIN
    RETURN '2012-03-05 13:12:14'
END

GO


IF CAST(GETDATE() AS DATE) = CAST(dbo.GetSomeDate() AS DATE)
BEGIN
    PRINT 'The same date'
END
ELSE
BEGIN
    PRINT 'Different dates'
END

-- in the select query
SELECT CASE WHEN CAST(GETDATE() AS DATE) = CAST(dbo.GetSomeDate() AS DATE) THEN 1 ELSE 0 END AS IsTheSame
0 голосов
/ 05 марта 2012

Это основной синтаксис для T-SQL IF и сравнения дат.

Если вы сравниваете только часть даты на равенство, вам нужно будет использовать:

select dateadd(dd,0, datediff(dd,0, getDate()))

Этот фрагмент эффективно установит часть времени на 00:00:00, чтобы вы могли сравнить только даты.Так что при использовании это будет выглядеть примерно так.

IF dateadd(dd,0, datediff(dd,0, fn_yourFunction())) = dateadd(dd,0, datediff(dd,0, GETDATE()))
BEGIN
   RETURN SELECT * FROM SOMEDATA
END

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...