2012-06-07 20 views
6

estoy tratando de hacer una declaración de selección en una tabla de datos para obtener la fila que está dentro del rango de fechas que estoy buscando. Soy nuevo en esto y no entiendo muy bien cómo funciona esta declaración selecta. Traté de escribir esto pero no está funcionando. ¿Puedes darme una mano aquí? Estoy atascadodeclaración de tabla de datos de C# con las fechas

foundRows = dt.Select("DATE1 <= '" + date1+ "' AND DATE2 >= '" + date1+ '"'); 

Respuesta

7

Además de embalar sus fechas con #, si fecha1 es un DateTime y no una cadena, es necesario utilizar el ToString (el formato de fecha) para obtener la instrucción SQL correcta. Para la depuración, es más fácil si primero creas una cadena que contiene tu filtro, luego haces la selección usando esa cadena. Luego puede mirar la cadena y usarla en el generador de consultas para validar su sql.

+0

ok lo tengo. string testing = date1.ToString ("MM/dd/aaaa"); DataRow [] foundRows; foundRows = dt.Select ("DATE1 <= '#" + testing + "#' AND DATE2> = '#" + testing + "#'"); decimal value1 = System.Convert.ToDecimal (foundRows [0] [0]); –

+0

lo que sucede en el caso de que el seleccionado no contenga nada. ex. la fecha está fuera de los límites? –

9

Este es el mejor criterio de búsqueda óptimo que he probado. teniendo en cuenta las fechas.

FROM_DATE = 12/01/2012 12/31/2012 TO_DATE =

y su columna en DataTable sobre la que se aplica. (en mi código 'fecha')

Su estado de cuenta será así.

DataRow[] rows = newTable.Select("date >= #" + from_date + "# AND date <= #" + to_date + "#"); 
0

Usando esto dentro de un componente de script SSIS. Acabo de usar el ejemplo de arriba que incluía "#" alrededor de las fechas. También convertí cada uno a una cadena. Esto funcionó perfectamente.

Por si acaso quieres saber cómo configuré esto dentro de SSIS: Primero tuve un flujo de datos usando el destino del conjunto de registros con una variable Object para almacenar el conjunto de registros.

en mi secuencia de comandos Incluí la variable como de solo lectura.

En la clase principal ...

public class ScriptMain : UserComponent 
{ 

OleDbDataAdapter a = new OleDbDataAdapter(); 
System.Data.DataTable AwardedVacTable = new System.Data.DataTable(); 
... 
... 

después en Pre-Ejecutar ...

public override void PreExecute() 
{ 
    base.PreExecute(); 

    a.Fill(AwardedVacTable, Variables.rsAwardedVac); 
... 
... 

entonces en un método personalizado accede a la tabla de datos ...

String dtFilter = "EmployeeID = " + empId.ToString() + " AND (#" + Convert.ToString(StartDate) "# <= EndDate AND #" + Convert.ToString(StartDate) + "# >= StartDate" + " OR #" + Convert.ToString(StartDate.AddDays((double)numDays)) + "# >= StartDate AND #" + Convert.ToString(StartDate.AddDays((double)numDays)) + "# <= EndDate)"; 

DataRow[] Overlaps = AwardedVacTable.Select(dtFilter); 
0

expression = "Fecha> # 2015-1-1 #"; DataRow [] foundRows = table.Select (expression); 与 select * from tablename where Date> '2015-1-1'

Cuestiones relacionadas