[ad_1]
Tengo que registrar todas las filas desde las últimas 30 hasta la de hoy. He probado esto pero no funciona
Lo que he probado:
seleccione fecha_hora de dsr_data donde fecha_hora >= CONVERT(Varchar(100), DATEADD(DAY,-30,GETDATE()),103) y fecha_hora <= CONVERT(varchar(100), getdate(),103)
Solución 3
SELECT date_time FROM dsr_data WHERE date_time between DATEADD(DAY,-30,GETDATE()) and GETDATE();
Solución 1
¿Por qué estás usando CONVERTIR?
La única razón posible es la misma razón por la que no funciona: está almacenando sus fechas como columnas NVARCHAR en lugar de DATE, DATETIME o DATETIME2.
Cuando compara cadenas, la comparación se basa completamente en el primer carácter diferente de las dos cadenas: y dado que está seleccionando específicamente formatear la fecha en formato 103, que es “dd/MM/aaaa”, la comparación será totalmente basura. el año se comprobará en último lugar, por ejemplo, por lo que el 31/01/2017 será anterior al 31/12/1952 porque la comparación se basará en el primer dígito del mes y ‘0’ es menor que ‘1’
Cambia tu base de datos. Almacene siempre los datos en tipos de datos apropiados: eso significa valores enteros en columnas INT, información de fecha en columnas DATE, DATETIME o DATETIME2, etc. Si no lo hace, este es sólo el primero de muchos problemas muy desagradables que le esperan en el futuro…
Solución 2
Utilice la siguiente consulta.
SELECT date_time FROM dsr_data WHERE date_time >= DATEADD(day,-30, getdate()) and date_time <= getdate()
[ad_2]
コメント