en MySQL
select * from record where register_date like '2009-10-10%'
¿Cuál es la sintaxis en SQL Server?
sql-server
sql-like
Paisal
fuente
fuente
DATETIME
valores como cadenas, y por qué puede ser malo usarBETWEEN
o>= AND <=
), vea este blog de Aaron Bertrand .5
votos para la etiqueta de operador similar . ¿Puedo solicitarle amablemente que sugiera sql-like como sinónimo ?Respuestas:
Puede utilizar la función DATEPART ()
Encuentro esta forma fácil de leer, ya que ignora el componente de tiempo, y no tiene que usar la fecha del día siguiente para restringir su selección. Puede ir a mayor o menor granularidad agregando cláusulas adicionales, utilizando el código DatePart apropiado, por ejemplo
para obtener registros realizados entre 12 y 1.
Consulte los documentos de MSDN DATEPART para obtener la lista completa de argumentos válidos.
fuente
No hay soporte directo para el operador LIKE contra las variables DATETIME, pero siempre puede convertir el DATETIME en un VARCHAR:
Consulte los documentos de MSDN para obtener una lista completa de los "estilos" disponibles en la función CONVERTIR.
Bagazo
fuente
WHERE CONVERT(VARCHAR(25), register_date, 25) LIKE '2009-10-10%'
Si lo hace, lo está forzando a realizar una conversión de cadena. Sería mejor crear un rango de fechas de inicio / finalización y usar:
Esto le permitirá usar el índice (si hay uno
register_date
), en lugar de un escaneo de tabla.fuente
Puede usar CONVERT para obtener la fecha en forma de texto. Si lo convierte a varchar (10), puede usar = en lugar de like:
O puede usar una fecha límite superior e inferior, con la ventaja adicional de que podría hacer uso de un índice:
fuente
Desafortunadamente, no es posible comparar datetime con varchar usando 'LIKE' Pero la salida deseada es posible de otra manera.
fuente
También puede usar convertir para que la fecha se pueda buscar usando LIKE. Por ejemplo,
fuente
El
LIKE
operador no trabaja con partes de fecha como mes o fecha, pero sí loDATEPART
hace.Comando para averiguar todas las cuentas cuya fecha de apertura fue el día 1:
* CASTING
OpenDt
porque su valor está enDATETIME
y no soloDATE
.fuente
Hay una cobertura muy irregular del operador LIKE para fechas en SQL Server. Solo funciona con formato de fecha estadounidense. Como ejemplo, podría intentar:
Probé esto en SQL Server 2005 y funciona, pero realmente necesitará probar diferentes combinaciones. Cosas extrañas que he notado son:
Parece que solo obtiene todo o nada para diferentes subcampos dentro de la fecha, por ejemplo, si busca 'apr 2%', solo obtiene algo en los años 20: omite los segundos.
El uso de un único guión bajo '_' para representar un solo carácter (comodín) no del todo trabajo, por ejemplo,
WHERE mydate LIKE 'oct _ 2010%'
va a no devolver todas las fechas antes del 10 - no devuelve nada en absoluto, de hecho!El formato es rígido americano: '
mmm dd yyyy hh:mm
'Me ha resultado difícil concretar un proceso durante unos segundos, así que si alguien quiere llevar esto un poco más lejos, ¡sea mi invitado!
Espero que esto ayude.
fuente
Llegué un poco tarde a este hilo, pero de hecho hay soporte directo para el operador similar en el servidor MS SQL.
Como se documenta en la ayuda de LIKE, si el tipo de datos no es una cadena, se intenta convertirlo en una cadena. Y como se documenta en la documentación de cast \ convert:
Si tiene una fecha como esta en la base de datos:
y haces consultas como esta:
obtienes esa fila.
Sin embargo, este formato de fecha sugiere que es un DateTime2 , luego la documentación dice:
Eso lo hace más fácil y puede usar:
y obtenga el registro de la factura. Aquí hay un código de demostración:
Hacer búsquedas de fecha y hora en el servidor SQL sin ninguna conversión a cadena siempre ha sido problemático. Obtener cada parte de la fecha es una exageración (que es poco probable que use un índice). Probablemente una mejor manera cuando no usa la conversión de cadenas sería usar verificaciones de rango. es decir:
fuente
Prueba esto
fuente
Resolví mi problema de esa manera. Gracias por las sugerencias de mejora. Ejemplo en C #.
fuente