usando between

4
usando Between Como alternativa al método anterior se podría lograr usando el Between en la query para filtrar por el rango de fechas. En el Form2 del ejemplo se podrá encontrar la implementación de este caso. public static LogActividades.RegistroActividadesDataTable GetFilterByDateRangeWithBetween(DateTime desde, DateTime hasta) { LogActividades.RegistroActividadesDataTable dt = new LogActividades.RegistroActividadesDataTable(); using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].To String())) { string sql = @"SELECT Id, Descripcion, fecharegistro, usuario FROM RegistroActividades WHERE CAST(CONVERT(CHAR(8), fecharegistro, 112) AS INT) BETWEEN CAST(CONVERT(CHAR(8), @desde, 112) AS INT) AND CAST(CONVERT(CHAR(8), @hasta, 112) AS INT)"; SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.AddWithValue("@desde", desde); cmd.Parameters.AddWithValue("@hasta", hasta); SqlDataAdapter da = new SqlDataAdapter(cmd);

Upload: yeni-martinez-alvarez

Post on 02-Jan-2016

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Usando Between

usando Between

Como alternativa al método anterior se podría lograr usando el Between en la query para filtrar por el rango de fechas.

En el Form2 del ejemplo se podrá encontrar la implementación de este caso.

public static LogActividades.RegistroActividadesDataTable GetFilterByDateRangeWithBetween(DateTime desde, DateTime hasta)

{

LogActividades.RegistroActividadesDataTable dt = new LogActividades.RegistroActividadesDataTable();

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))

{

string sql = @"SELECT Id, Descripcion, fecharegistro, usuario

FROM RegistroActividades

WHERE CAST(CONVERT(CHAR(8), fecharegistro, 112) AS INT) BETWEEN CAST(CONVERT(CHAR(8), @desde, 112) AS INT)

AND CAST(CONVERT(CHAR(8), @hasta, 112) AS INT)";

SqlCommand cmd = new SqlCommand(sql, conn);

cmd.Parameters.AddWithValue("@desde", desde);

cmd.Parameters.AddWithValue("@hasta", hasta);

SqlDataAdapter da = new SqlDataAdapter(cmd);

da.Fill(dt);

}

return dt;

}

Page 2: Usando Between

Ayuda con filtro por rango de fechas...Hola experto... necesito ayuda sobre vb6 con access... tengo problemas con la búsqueda de

pacientes por rango de fecha, lo que tengo lo de intentado de las siguientes formas: 

1.- busca = "SELECT * FROM paciente where fecha >= #" & Format(fecinicio, "dd-mm-yyyy")

& "# and fecha <= #" & Format(fectermino, "dd-mm-yyyy") & "#" 

Set rst = Base.OpenRecordset(busca) 

2.- busca = "SELECT * FROM paciente where fecha >= '" & Format(fecinicio, "dd-mm-yyyy") &

"' and fecha <= '" & Format(fectermino, "dd-mm-yyyy") & "'" 

Set rst = Base.OpenRecordset(busca) 

3.- busca = "SELECT * FROM paciente where fecha >= #" & fecinicio & "# and fecha <= #" &

fectermino & "#" 

Set rst = Base.OpenRecordset(busca) 

4.- busca = "SELECT * FROM paciente where fecha >= '" & fecinicio & "' and fecha <= '" &

fectermino & "'" 

Set rst = Base.OpenRecordset(busca) 

5.- busca = "SELECT * FROM paciente where fecha between #" & fecinicio & "# and #" &

fectermino & "#" 

Set rst = Base.OpenRecordset(busca) 

6.- busca = "SELECT * FROM paciente where fecha between '" & fecinicio & "' and '" &

fectermino & "'" 

Set rst = Base.OpenRecordset(busca) 

Y me filtra, pero solo con el día, no con la fecha completa, por ejemplo ingreso: 

08-10-2007 

12-11-2007 

15-12-2007 

22-01-2008 

03-02-2008 

Y si busco desde: 01-10-2007 hasta: 30-10-2007, me muestra todos los datos y si lo filtro

desde: 01-10-2007 hasta: 14-11-2007, me muestra: 

08-10-2007 

12-11-2007 

03-02-2008 

Entonces queda demostrado que esta solo filtrando por el día.. 

Bueno y la pregunta del millón sería ¿cómo busco entre dos fechas completas, día, mes y

año?... ahh.. y estoy utilizando DTPicker para la fecha de inicio y termino.. 

Ojala allá sido claro con mi duda y espero me pueda y quiera ayudarme... 

De antemano muchas gracias...Experto

Hola: 

busca = "SELECT * FROM paciente where fecha >= ' " & FechaInicio & " ' And fecha <= ' " &

FechaFinal & " ' " 

Así queda tu búsqueda: 

Page 3: Usando Between

Te puedo decir que cuando empecé con la rpogramacion me costo mucho la forma en que

metía el valor de las variables y pues así quedaría. 

aclarro que el valor de la variable debe ser tipo fecha de lo contrario puede o no funcionar si la

varable es tipo string . Ojo en eso que no es lo mismo. 

Si no te funciona hazlo de esta forma. 

"SELECT * FROM paciente Where fecha Between DateValue('" & FechaInicio & "' ) And

DateValue('" & FechaFinal & "')" 

Suerte y no dudes en volver a preguntar.Usuario

Hola, muchas gracias... era como me decías, pero con algunos cambios, por que cuando

consultas con comillas simples (') arroja el error '3464' "no coinciden los tipos de datos en la

expresión de criterios", por lo cual cambie de comilla simple a #. Ej. 

asi me decias: 

busca = "SELECT * FROM paciente where fecha >= ' " & FechaInicio & " ' And fecha <= ' " &

FechaFinal & " ' " 

asi lo deje: 

"select * from paciente where fecha >= #" & FechaInicio & "# and fecha <= #" & FechaFinal &

"#" 

codigo que me funciono correctamente: 

'*********************************************** 

'para mostrar las fechas de inicio y termino utilice la herramienta DTPicker 

dim rst as recordset 'variable que almacenara todos los registros de la tabla 

Dim fi, ft As Date 'importante declarar las variables como 'date' 

fi = Format(fecinicio, "mm-dd-yyyy") 'muy importante este formato de fecha para buscar en

access 'mm-dd-yyyy' 

ft = Format(fectermino, "mm-dd-yyyy") 

'la variable 'Base' es la variable de conexion que utilice en el modulo 

Set rst = Base.OpenRecordset("select * from paciente where fecha >= #" & fi & "# and fecha

<= #" & ft & "#") 

'************************************************ 

Eso fue lo que realice... ojala le ayude a otro con la misma duda que yo tenia... 

Muchas gracias experto por la gran ayuda brindada!.. 

Saludos a todos...