Crear condición mayor y menor

Buenas tardes Señores de esta linda comunidad espero esten bien,

Me podrían ayudar favor, tengo un query que me muestra la fecha de las facturas y los días que lleva desde la fecha de contabilización a la fecha de hoy, necesito que al ejecutar el query este me permita seleccionar como un filtro que le pueda digitar y seleccionar y decir muestre las facturas que llevan mas de 6 días.
Seria algo como
Fecha iNicial: 01/12/2018
Fecha Final: 11/12/2018
Días sin facturar: 8 días

Este es mi query

SELECT
T0.[CardCode],
T0.[CardName],
T0.[City],
T0.[Phone1],
T0.[Phone2],
T0.[E_MaiL],
T0.[Address],
T1.[SlpName],
T2.[DocNum],
T2.[DocDate],
DATENAME (WEEKDAY,T2.[DocDate]) AS 'Dia de Facturación',
DATEDIFF(DAY, T2.DocDate, GETDATE()) AS 'Dias'
FROM OCRD T0 INNER JOIN OSLP T1 ON T0.[SlpCode] = T1.[SlpCode]
INNER JOIN OINV T2 ON T0.CardCode= T2.CardCode
WHERE DATEDIFF(DAY, T2.DocDate, GETDATE()) > 2 and T2.[DocDate] BETWEEN '[%0]' AND '[%1]'

A espera de su pronta respuesta

Gracias

Hola amigo, espero haber entendido bien, te refieres a esto?

declare @dias as int

set @dias=[%0]

SELECT
T0.[CardCode],
T0.[CardName],
T0.[City],
T0.[Phone1],
T0.[Phone2],
T0.[E_MaiL],
T0.[Address],
T1.[SlpName],
T2.[DocNum],
T2.[DocDate],
DATENAME (WEEKDAY,T2.[DocDate]) AS 'Dia de Facturación',
DATEDIFF(DAY, T2.DocDate, GETDATE()) AS 'Dias'
FROM OCRD T0 
INNER JOIN OSLP T1 ON T0.[SlpCode] = T1.[SlpCode]
INNER JOIN OINV T2 ON T0.CardCode= T2.CardCode
WHERE DATEDIFF(DAY, T2.DocDate, GETDATE())=@dias
2 Me gusta

Hola @Ricardo_Quiro, gracias por responder si asi como me lo muestra estaría bien, pero necesito que cuando se ejecute la consulta este solicite que ingrese la fecha inicial y final junto con el dia, estilo asi te dejo la imagen.
image
De esta forma seria genial pero hace falta que me de la opcion de colocarle el rango o los días de consulta.

Gracias

Bien @GiancarloB, sólo sería agregarlo al criterio de selección.

declare @docini as datetime
declare @docfin as datetime
declare @dias as int

set @docini=[%0]
set @docfin=[%1]
set @dias=[%2]

SELECT
T0.[CardCode],
T0.[CardName],
T0.[City],
T0.[Phone1],
T0.[Phone2],
T0.[E_MaiL],
T0.[Address],
T1.[SlpName],
T2.[DocNum],
T2.[DocDate],
DATENAME (WEEKDAY,T2.[DocDate]) AS 'Dia de Facturación',
DATEDIFF(DAY, T2.DocDate, GETDATE()) AS 'Dias'
FROM OCRD T0 
INNER JOIN OSLP T1 ON T0.[SlpCode] = T1.[SlpCode]
INNER JOIN OINV T2 ON T0.CardCode= T2.CardCode
WHERE DATEDIFF(DAY, T2.DocDate, GETDATE())=@dias
and T2.[DocDate] BETWEEN @docini AND @docfin

Nos comentas como te fue.

1 me gusta

Oye @Ricardo_Quiro, me sale este error:

[Microsoft][SQL Server Native Client 11.0][SQL Server]Conversion failed when converting date and/or time from chacter string. ‘Alertas recibidas’ (OAIB)

Gracias

@GiancarloB no consideré las comillas simples, se me pasó,

declare @docini as datetime
declare @docfin as datetime
declare @dias as int

set @docini='[%1]'
set @docfin='[%2]'
set @dias='[%3]'

SELECT
T0.[CardCode],
T0.[CardName],
T0.[City],
T0.[Phone1],
T0.[Phone2],
T0.[E_MaiL],
T0.[Address],
T1.[SlpName],
T2.[DocNum],
T2.[DocDate],
DATENAME (WEEKDAY,T2.[DocDate]) AS 'Dia de Facturación',
DATEDIFF(DAY, T2.DocDate, GETDATE()) AS 'Dias'
FROM OCRD T0 
INNER JOIN OSLP T1 ON T0.[SlpCode] = T1.[SlpCode]
INNER JOIN OINV T2 ON T0.CardCode= T2.CardCode
WHERE DATEDIFF(DAY, T2.DocDate, GETDATE())=@dias
or T2.[DocDate] BETWEEN 
case when @docini=''then '' else @docini end AND
case when @docfin=''then '' else @docfin end
1 me gusta

Hola @Ricardo_Quiro, hice lo de las comillas y no me habia funcionado, ejecute lo que me envias pero me sale el error, no entiendo gracias por tu ayuda.

:roll_eyes:

@GiancarloB, por favor los mensajes de error pasalos a texto :+1:

@SidV, muchas gracias por responder, mira este es el error, gracias por tu ayuda

Slds

1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Must specify table to select from. 2). [Microsoft][SQL Server Native Client 11.0][SQL Server]Statement ‘Alertas recibidas’ (OAIB) (s) could not be prepared.

Hola @GiancarloB

A @Ricardo_Quiro se le pasaron algunos corchetes en los nombres de campo.

Prueba a ver si esto soluciona el error y si es así marca su respuesta como solución:

declare @docini as datetime
declare @docfin as datetime
declare @dias as int

set @docini='[%1]'
set @docfin='[%2]'
set @dias='[%3]'

SELECT
T0.[CardCode],
T0.[CardName],
T0.[City],
T0.[Phone1],
T0.[Phone2],
T0.[E_MaiL],
T0.[Address],
T1.[SlpName],
T2.[DocNum],
T2.[DocDate],
DATENAME (WEEKDAY,T2.[DocDate]) AS 'Dia de Facturación',
DATEDIFF(DAY, T2.[DocDate], GETDATE()) AS 'Dias'
FROM OCRD T0 
INNER JOIN OSLP T1 ON T0.[SlpCode] = T1.[SlpCode]
INNER JOIN OINV T2 ON T0.[CardCode] = T2.[CardCode]
WHERE DATEDIFF(DAY, T2.[DocDate], GETDATE())=@dias
or T2.[DocDate] BETWEEN 
case when @docini=''then '' else @docini end AND
case when @docfin=''then '' else @docfin end

Saludos

1 me gusta