Receber um parametro de períodos de datas concatenadas em procedure sql e aplicar em select

Preciso de uma ideia de vocês como passar um parâmetro que vem com várias datas concatenadas e aplicar no select na clausula WHERE.

Observação: por motivos de regras de negócio, tem que ser feito através de procedure mesmo.

A estrutura abaixo é só uma amostra:

CREATE PROCEDURE [dbo].[PeriodosFiltro] 
( 
  @codProduto  INT         -- Código do Projeto
 ,@codcliente  VARCHAR(14) -- 
 ,@cpf VARCHAR(14)  INT         -- Código do Projeto
 ,@filtroanosmeses VARCHAR(1000)--Filtro com anos e meses concatenados
) 

----No campo filtroanosmeses receberei os parâmetros assim: "2002|12,2003|06,2015|02"'


Como fazer um loop para trazer o select filtrando as datas

SELECT [Pedido]
      ,[Name]
      ,[ValorTotal]
      ,[Description]
      ,[Details]
      ,[Selloff]
      ,[ClienteId]
      , [DataPedido]
  FROM [dbo].[Pedido]
where DataPedido== @filtroanosmeses

Boa noite @Lucia_Gabiatti uma pergunta, o campo DataPedido da sua tabela Pedido é um datetime ou um varchar?
Caso seja um Varchar, qual o formato que ele se encontra ( 201202 ? )

Abraços
Max

2 curtidas

Boa noite!!
é um varchar, se encontra no formato “01022012”

@Lucia_Gabiatti já vem um problema ai onde um data deveria ser salva no formato date ou datetime, porque na hora de fazer procedimentos não precisa transformar isso aumenta o processamento e pioria o desempenho.

1 curtida

Além de corrigir o tipo como @Dragoon falou, passe as datas como array, não faz essa gambiarra concatenando.

Se o banco não for esse, pesquise exemplo equivalente.

De fato, Dragon. embora na tabela apresenta-se uma cenário simples, isso será aplicado num cenário fiscal muito complexo de uma empresa muito importante que relaciona diversas empresas em que a tabela de data de relatório infelizmente se encontra dessa forma e não posso mudar, mas é somente esse campo, existem outros campos datas nessa mesma tabela que se encontram no formato Date, mas esse se encontra no varchar(8). Portanto o que posso fazer realmente somente passar o campo como array de datas. Por favor, vc saberia me informar como esse parâmetro no c# como array para a procedure e como receber na procedure esse mesmo array para aplicar no select?

1 curtida

Por favor, vc saberia me informar como esse parâmetro no c#(ADO.NET) como array para a procedure e como receber na procedure esse mesmo array para aplicar no select?

1 curtida

Tenta isso: https://stackoverflow.com/questions/40279185/passing-array-to-oracle-procedure-from-c-sharp

2 curtidas

CREATE or replace PACKAGE Testpackage AS
TYPE Areas_t is table of VARCHAR(100) index by BINARY_INTEGER;
PROCEDURE TESTPROCEDURE(Areas IN Areas_t);
END Testpackage;

não entendi onde vai esse trecho de código.