2012-07-10 32 views
8

tengo una consulta básica:¿Cómo encontrar el número de días entre dos fechas

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 

quiero añadir otra columna a la salida ... vamos a llamarlo "diferencia" para averiguar el número de días entre 'dtcreated' y 'dtlastupdated' Entonces, por ejemplo, si el registro 1 tiene un dt creado el 1/1/11 y dtlastupdated es 1/1/12, la columna "Difference" sería "365".

¿Se puede lograr esto en una consulta?

+2

buscar en Google "¿Cómo encontrar el número de días entre dos fechas de consulta" que se encuentra mult Itudes de respuestas. Eso es lo que debes probar primero. –

+1

@Jeremy, ¿no es bueno tener una respuesta aquí? Google, de hecho, acaba de traerme aquí. –

+0

@AdrianMouat tenga en cuenta que esto es más de un año después de que se hizo la pregunta. StackOverflow disfruta de resultados de búsqueda mejor clasificados en Google, por lo que este es un resultado natural ... independientemente de que no sea necesario. –

Respuesta

23

que usaría DATEDIFF:

declare @start datetime 
declare @end datetime 

set @start = '2011-01-01' 
set @end = '2012-01-01' 

select DATEDIFF(d, @start, @end) 

results = 365 

por lo que para su consulta:

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
    , DATEDIFF(d, dtCreated, dtLastUpdated) as Difference 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 
+0

Recibo un error al respecto ... La conversión SQL Error Error al convertir la fecha y hora de la serie de caracteres – Shmewnix

+0

@Shmewnix ¿cuál es el tipo de datos para 'dtCreated' y' dtLastUpdated'? Si no son de fecha y hora, deberá convertirlos. – Taryn

+0

¿dónde los convertirías? En la declaración de selección? o en la declaración de fechada? – Shmewnix

4

para encontrar el número de días entre dos fechas, que utilice:

DATEDIFF (d, startdate , enddate) 
1

lo haría utilice la función DATE_DIFF para proporcionar este valor de la siguiente manera:

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
    , DATEDIFF(d, dtLastUpdated, dtCreated) AS Difference 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 

EDIT: si se utiliza MySQL se omite la 'd' dejándole con

DATEDIFF(dtLastUpdated, dtCreated) AS Difference 
1

Si está utilizando MySQL no es la función DATEDIFF que calculan los días entre dos fechas:

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
    , DATEDIFF(dtLastUpdated, dtCreated) as Difference 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 
0
DATEDIFF(d, 'Start Date', 'End Date') 

lo hacen

Cuestiones relacionadas