Member 14743579 Ответов: 1

Я могу попытаться найти данные в SQL server по этой группе, например id и диапазон между двумя датами


я могу попытаться найти данные в sql server, используя like in sql.
но мой приведенный ниже код не работает должным образом.

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

ALTER procedure [smtpserv_gogts].[sppanmembersearch](
@regno varchar(50)=null,    
@strdate date=null,    
@enddate date =null  )
as
begin
select AppMstId, AppMstRegNo, AppmstFName, AppMstEmailId, AppMstMobileNo,AppMstITPAN,AppMstDOJ,PANCopy, addressproof,aadharbackside,cheque,case(VerifyPAN) when 0 then 'Pending' when 1 then 'Verified' end as VerifyPAN from membermaster 
where (VerifyPAN = 0 AND AppMstITPAN<>'' or PANCopy is NOT NULL) AND appmstregno = ISNULL((appmstregno like @regno + '%'), appmstregno) and cast(AppMstDOJ as date) between isnull(@strdate,cast(AppMstDOJ as date)) and isnull(@enddate,cast(AppMstDOJ as date)) ORDER BY AppMstDOJ DESC;    

end

ZurdoDev

Что значит "не работает должным образом"?

Member 14743579

я получил ответ

1 Ответов

Рейтинг:
1

MadMyche

оригинальный пост:
но мой приведенный ниже код не работает должным образом.
Это не делает для очень хороший вопрос:
1. У нас нет способа узнать, что вы ожидаете произойдет.
2. Мы не знаем, что происходит на самом деле.
3. У нас нет данных для устранения этой проблемы

Это также облегчает сообществу помощь вам, если код, который вы публикуете, имеет некоторое сходство с форматированием. Хотя это может не иметь значения для SQL Server, это действительно облегчает нам, людям, чтение того, что происходит, и, возможно, намек на ход ваших мыслей.
Поэтому я отформатировал его сам:
ALTER procedure [smtpserv_gogts].[sppanmembersearch](
   @regno   varchar(50) = null,
   @strdate date        = null, 
   @enddate date        = null
) as
begin
   select AppMstId
        , AppMstRegNo
        , AppmstFName
        , AppMstEmailId
        , AppMstMobileNo
        , AppMstITPAN
        , AppMstDOJ
        , PANCopy
        , addressproof
        , aadharbackside
        , cheque
        , case(VerifyPAN)
              when 0 then 'Pending'
              when 1 then 'Verified'
          end as VerifyPAN

   from membermaster 

   where (   VerifyPAN   = 0
         AND AppMstITPAN <> ''
         or  PANCopy     is NOT NULL
   )
   AND   appmstregno = ISNULL((appmstregno like @regno + '%'), appmstregno)
   and   cast(AppMstDOJ as date) between isnull(@strdate,cast(AppMstDOJ as date))
                                     and isnull(@enddate,cast(AppMstDOJ as date))

   ORDER BY AppMstDOJ DESC;
end
И то, что кажется мне проблематичным, это:
1. Вы, по-видимому, храните даты в своей таблице как VarChar или что-то подобное.
2. Первая часть предложения WHERE может быть проблематичной с точки зрения AND...OR комбо.
3. следующая порция тоже выглядит не совсем правильно.

Конечно, незнание того, что вы хотите, имеете и получили, не делает это легким.


Member 14743579

я уже пробовал этот код, но он показывает ошибку на like. но спасибо за вашу попытку решить мою проблему, я получил правильный ответ на свою проблему.

MadMyche

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

И все же ... было бы очень полезно знать конкретно, что не работает