en MySQLSQL Server datetime LIKE select?
select * from record where register_date like '2009-10-10%'
¿Cuál es la sintaxis de SQL Server?
Gracias.
en MySQLSQL Server datetime LIKE select?
select * from record where register_date like '2009-10-10%'
¿Cuál es la sintaxis de SQL Server?
Gracias.
se puede usar la función DATEPART()
SELECT * FROM record
WHERE (DATEPART(yy, register_date) = 2009
AND DATEPART(mm, register_date) = 10
AND DATEPART(dd, register_date) = 10)
encuentro esta manera fácil de leer, ya que ignora el componente de tiempo, y usted no tiene que usar la fecha del día siguiente a restringe tu selección. Puede ir a mayor o menor granularidad agregando cláusulas adicionales, utilizando el código DatePart apropiado, p.
AND DATEPART(hh, register_date) = 12)
para obtener registros realizados entre el 12 y 1.
Consulte al MSDN DATEPART docs para la lista completa de los argumentos válidos.
Si hay un index on register_date, esto ignorará por completo el índice y el rendimiento sufrirá. Probablemente bastante mal. –
Bien, pero evita el problema de utilizar el equivalente de cadena del día posterior a la fecha en cuestión, que se sugiere en algunas de las respuestas aquí. Difícil donde la fecha en cuestión es el final del mes o año. –
+1 ¿Por qué se bajó este valor? – Andomar
No hay soporte directo para operador LIKE contra variables de fecha y hora, pero siempre se puede echar la fecha y hora a un VARCHAR:
SELECT (list of fields) FROM YourTable
WHERE CONVERT(VARCHAR(25), register_date, 126) LIKE '2009-10-10%'
Compruebe el MSDN docs para obtener una lista completa de "estilos" disponibles en la función CONVERT.
Marc
Esa me parece la forma * menos * deseable de manejar las fechas ... –
estuvo de acuerdo, pero el OP solicitó una forma de manejar la fecha y hora con LIKE .... Pero estoy de acuerdo: las fechas se deben manejar preferiblemente con rangos como> = y <= o ENTRE ENTRE - mucho mejor enfoque –
Gracias a todos. Lo siento, soy solo un novato para SQL. – Paisal
Si lo hace, que están obligando a realizar una conversión de cadenas. Sería mejor construir un intervalo de fechas de inicio/final, y el uso de:
declare @start datetime, @end datetime
select @start = '2009-10-10', @end = '2009-11-10'
select * from record where register_date >= @start
and register_date < @end
Esto permitirá que utilice el índice (si hay uno en register_date
), en lugar de un recorrido de tabla.
Gracias. Lo siento, soy solo un novato para SQL. – Paisal
Puede usar CONVERT para obtener la fecha en forma de texto. Si convierte a un varchar (10), puede utilizar = en lugar de como:
select *
from record
where CONVERT(VARCHAR(10),register_date,120) = '2009-10-10'
O puede utilizar una fecha superior y el límite inferior, con la ventaja añadida de que podría hacer uso de un índice:
select *
from record
where '2009-10-10' <= register_date
and register_date < '2009-10-11'
También puede usar convertir para hacer que la fecha se pueda buscar usando LIKE. Por ejemplo,
select convert(VARCHAR(40),create_date,121) , * from sys.objects where convert(VARCHAR(40),create_date,121) LIKE '%17:34%'
Hay una cobertura muy escamosa del operador LIKE para las fechas en SQL Server. Solo funciona usando el formato de fecha americano. A modo de ejemplo, usted podría intentar:
... WHERE register_date LIKE 'oct 10 2009%'
He probado esto en SQL Server 2005 y funciona, pero que realmente va a necesitar probar diferentes combinaciones. cosas extrañas que he notado son:
Sólo parecen tener todo o nada para los distintos subcampos dentro de la fecha, por ejemplo, si se busca 'apr 2%' sólo se consigue nada en el día 20 de - omite 2da.
uso de un único guión bajo '_' para representar un solo carácter (comodín) no sea del todo el trabajo, por ejemplo, WHERE mydate LIKE 'oct _ 2010%'
voluntad no retorno todas las fechas antes el 10 - no devuelve nada en absoluto, ¡de hecho!
El formato es americana rígida: 'mmm dd yyyy hh:mm
'
he encontrado que es difícil de concretar un proceso para likeing segundos, por lo que si alguien quiere llevar esto un poco más lejos, adelante!
Espero que esto ayude.
Desafortunadamente, no es posible comparar la fecha y hora hacia varchar con 'LIKE' Pero la salida deseada es posible de otra manera.
select * from record where datediff(dd,[record].[register_date],'2009-10-10')=0
Esto funcionó para mí. Muchas gracias –
LIKE
El operador no funciona con componentes de fecha como el mes o la fecha, pero el operador DATEPART
hace.
comando para encontrar todas las cuentas cuyo Fecha Abierta estaba en la primera:
SELECT *
FROM Account
WHERE DATEPART(DAY, CAST(OpenDt AS DATE)) = 1`
* CASTING OpenDt
porque su valor está en DATETIME
y no sólo DATE
.
He resuelto mi problema de esa manera. Gracias por las sugerencias de mejoras. Ejemplo en C#.
string dd, mm, aa, trc, data;
dd = nData.Text.Substring(0, 2);
mm = nData.Text.Substring(3, 2);
aa = nData.Text.Substring(6, 4);
trc = "-";
data = aa + trc + mm + trc + dd;
"Select * From bdPedidos Where Data Like '%" + data + "%'";
¿Qué es lo que realmente quieres comprobar? ¿Que una fecha y hora determinada tiene una parte de fecha determinada? ¿O algo mas? –
Para tener una discusión sana sobre esto (incluyendo por qué es malo tratar los valores 'DATETIME' como cadenas, y por qué puede ser malo utilizar' BETWEEN' o '> = AND <='), vea [este blog de Aaron Bertrand] (http://is.gd/4EgDF). –
Su pregunta tiene al menos '5' votos para la etiqueta [tag: like-operator]. ¿Podría solicitar amablemente que sugiera [tag: sql-like] como [sinónimo] (http://stackoverflow.com/tags/like-operator/synonyms)? – Kermit