2012-08-16 35 views
11

¿Cómo se realiza una instrucción LIKE en una columna del tipo de datos DateTime en SQL Server?Declaración SQL LIKE en un tipo DateTime

Si funciono el siguiente código SQL me devuelve todas las fechas con 2.009 pulg.

SELECT * FROM MyTable where CheckDate LIKE '%2009%' 

Sin embargo, si quiero todas las fechas &, Nov Dic Oct yo esperaría a ser capaces de hacer la siguiente:

SELECT * FROM MyTable where CheckDate LIKE '%2009-1%' 

¡Pero esto no me devuelve nada!

Le doy al usuario una opción de filtro donde teclean la cadena de fecha y a medida que escriben filtro los datos. Entonces, si escriben '20', me gustaría devolver todas las fechas con '20' dentro de la fecha (así podrían ser todas las fechas de 2012 o un valor de fecha como 20/06/1999)

¿Alguien puede ayudar? ?

estoy usando SQL Server 2008.

Gracias de antemano.

+0

Gracias por su respuesta, he actualizado el trabajo con más detalle en lo que estoy tratando de hacer – Sun

+0

Ha comprobado que sus usuarios quieren una instalación de este tipo? Nunca una vez quise buscar "toda la actividad que sucedió el día 10 de cualquier mes, o en octubre, o en 2010". –

Respuesta

20

Puede usar la función DATEPART para extraer porciones de fechas. También se debe hacer sus consultas más explícito acerca de lo que estás tratando de lograr:

funciones
SELECT * FROM MyTable 
where DATEPART(year,CheckDate)=2009 and 
     DATEPART(month,CheckDate) between 10 and 12 

(Hay también nombrado específicamente, como MONTH y YEAR, pero yo prefiero DATEPART de coherencia, ya que puede acceder a todos los componentes de un datetime)

Debe intentar evitar pensar en datetime s como tener cualquier tipo de formato de cadena. Tratarlos como cadenas es una de las mayores fuentes de errores que encontramos.

2

Puede usar algo como esto:

SELECT * 
FROM MyTable 
WHERE CheckDate >= '2009-10-01' AND CheckDate < '2010-01-01'; 
+1

Y mientras tanto, intente utilizar un formato de fecha ** independiente del idioma **, como '20091001', que funcione para ** todas las versiones ** de SQL Server ... –

+3

Peligroso. Mientras que la consulta original forzaba una conversión de 'datetime' a una cadena (y siempre producirá un valor formateado consistentemente), esto fuerza conversiones de cadena a' datetime', y dependiendo de la configuración regional, de hecho puede estar buscando cualquier cosa a partir del 10 de enero de 2009 –

5

Si es necesario utilizar Like operador (por alguna razón) tiene que convertir la columna de la DateTime en un varchar.

SELECT * 
FROM MyTable 
WHERE CONVERT(VARCHAR, CheckDate, 120) LIKE '%2009-1%' 
Cuestiones relacionadas