la ejecución de consultas con fecha y hora en la cláusula WHERE
-
28-09-2019 - |
Pregunta
Yo uso de SQL Server 2008 R2 como un almacén de datos.
Hasta ahora en la máquina de prueba que tenía la versión Inglés del software y se utiliza para realizar consultas de formato del campo fecha y hora como
fromDate.ToString("MM/dd/yyyy");
Ahora he desplegado la base de datos en otro servidor que está en el idioma italiano. Voy a cambiar el formato en mi código para
fromDate.ToString("dd/MM/yyyy");
¿Hay una manera de hacer la consulta en un formato neutral?
Gracias!
Editar
Me olvidé de mencionar que estoy usando NetTiers con CodeSmith. He aquí una muestra completa ??p>
AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate.ToString("MM/dd/yyyy"));
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate.ToString("MM/dd/yyyy"));
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
Solución
ISO 8601 Elementos de datos y formatos de intercambio - Intercambio de información - Representación de fechas y horas permite tanto la AAAA-MM-DD y AAAAMMDD. SQL Server reconoce las especificaciones ISO.
A pesar de que la norma permite que tanto el formatos AAAA-MM-DD y para AAAAMMDD fecha de calendario completa representaciones, si el día [DD] es omitido entonces sólo el formato AAAA-MM esta permitido. Rechazando fechas la forma YYYYMM, los evita estándar confusión con el truncado representación AAMMDD (todavía a menudo se utiliza).
Yo prefiero el formato AAAAMMDD, pero yo creo que es porque yo sólo sabía sobre eso para empezar, y me parece más universal, después de haber acabado con personajes que podrían ser considerados configuración regional específica.
Otros consejos
Usted debe compartir el código que está utilizando para ejecutar la consulta, pero supongo que usted está construyendo una consulta SQL de forma dinámica utilizando concats cadena para construir la consulta y los argumentos. Usted no debe utilizar una consulta parametrizada a continuación, puede pasar los datos como un objeto de fecha y no hay necesidad de Converto una cadena.
Por ejemplo, si la consulta podría ser algo como esto
DateTime fromDate = DateTime.Now;
SqlCommand cmd = new SqlCommand(
"select * from Orders where fromDT = @fromDate", con);
cmd.Parameters.AddWithValue("@fromDate", fromDate);
...
Como efecto secundario bien, esto reducirá el riesgo de inyección de SQL .
Actualización: Después de su edición, que hace cambiar el contexto de la pregunta de manera significativa, y tengo que admitir que tengo cero conocimiento del proyecto .netTiers. Pero sólo por curiosidad ¿Ha intentado simplemente pasando las instancias fecha directamente como en el siguiente?
AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate);
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate);
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
En lo personal, yo siempre uso yyyy-MM-dd
. Esto también hace que sea ordenable como una cadena.
Sin embargo, una fecha es una fecha es una fecha. No hay necesidad de cambiar la fecha en una cadena. En .NET, DateTime
usuario.