Member 12724138 Ответов: 1

Sql server if условие на основе даты


Мне нужна помощь в том, чтобы дать условие "если существует" и "если не существует".

Я хочу написать условие if, основанное на дате, такое, что если какая-либо строка существует в таблице 1 на текущую дату TARGET_DT для конкретного задания, то выполните какое-то действие, а затем выполните другое действие. как показано ниже

IF EXISTS(SELECT 1 FROM COD_BLU_OPENING_VOLUME WHERE TARGET_DT=CONVERT(DATETIME,GETDATE(),101) AND JOBID=@OPENJOB)
         BEGIN
             IF(SELECT COUNT(1) FROM COD_BLU_INVENTORY WITH(NOLOCK) WHERE (JOBID=@JOB AND STATUS='A' AND TARGETDT = CONVERT(DATETIME,@TARGETDT,101)))=0
                 BEGIN
                     INSERT INTO COD_BLU_INVENTORY(JOBID,TARGETDT,CARRYOVER,FRESHVOL,TOTALVOL,STATUS,UPDATEDBY,UPDATEDT,OPENINGVOL)
                     VALUES(@JOB,@TARGETDT,@CARRYOVERVOL,@FRESHVOL,@TOTALVOL,'A',@EMPCODE,GETDATE(),@CARRYOVERVOL)
                     SELECT '1'
                 END
             ELSE
                 BEGIN
                     SELECT'0'
                 END
             END
      ELSE IF NOT EXISTS(SELECT 1 FROM COD_BLU_OPENING_VOLUME WHERE TARGET_DT=CONVERT(DATETIME,GETDATE(),101) AND TARGET_DT<CONVERT(DATETIME,GETDATE(),101) AND JOBID=@OPENJOB)
         BEGIN
             INSERT INTO COD_BLU_OPENING_VOLUME(TARGET_DT,JOBID,OPENING_COUNT,UPDATED_BY,UPDATED_DT,PRE_ASSIGNEDCOUNT)
             VALUES(@OPENTARDT,@OPENJOB,@OPENCNT,@OPENEMPCODE,GETDATE(),@PREOPENCNT)

             IF (SELECT COUNT(1) FROM COD_BLU_INVENTORY WITH(NOLOCK) WHERE (JOBID=@JOB AND STATUS='A' AND TARGETDT = CONVERT(DATETIME,@TARGETDT,101)))=0
                 BEGIN
                     INSERT INTO COD_BLU_INVENTORY(JOBID,TARGETDT,CARRYOVER,FRESHVOL,TOTALVOL,STATUS,UPDATEDBY,UPDATEDT,OPENINGVOL)
                     VALUES(@JOB,@TARGETDT,@CARRYOVERVOL,@FRESHVOL,@TOTALVOL,'A',@EMPCODE,GETDATE(),@CARRYOVERVOL)
                     SELECT '1'
                 END
             ELSE
                 BEGIN
                     SELECT'0'
                 END
         END
     END



but the problem is,if the TARGET_DT is given as future date, it executes the else condition, I want it to execute the if condition, the above is the code which I tired. Any help in solving this will be appreciated. Please help.



Что я уже пробовал:

Я дал такую же попытку, как и та, что была дана выше

1 Ответов

Рейтинг:
1

OriginalGriff

Прекратите преобразовывать даты в строки, чтобы сравнить их: когда вы делаете это, вы получаете сравнение строк, которое означает, что результат основан на первом различном символе между двумя строками.
Вам нужно сравнение даты или времени: поэтому измените свою БД на хранение дат в виде даты или времени и сравните это значение непосредственно с возвращаемым значением GETDATE ().

Всегда храните значения в наиболее подходящем формате, а не в виде строк. Это может показаться проще, но это вызывает огромные проблемы каждый раз, когда вы хотите их использовать.


Member 12724138

спасибо вам...но не могли бы вы помочь с этим, пожалуйста

OriginalGriff

Какой кусочек? Вы уже починили свою БД?

Member 12724138

да...можете ли вы помочь мне с условиями if

OriginalGriff

Если ваша БД теперь хранит их как DATETIME, то просто сравните их!