2011-05-18 9 views
7

Digamos que tengo un rango de tablas SQL que se llaman name_YYYY_WW donde YYYY = año y WW = número de semana. Si invoco una función que guía una fecha definida por el usuario a la tabla correcta.Problema al extraer el número de año y semana de la cadena en PSQL

Si la fecha introducida es "20110101":

SELECT EXTRACT (WEEK FROM DATE '20110101') retornos 52 y

SELECT EXTRACT (YEAR FROM DATE '20110101') rendimientos 2011.

Mientras hay nada malo con estos resultados que quiero "20110101" a cualquiera de los puntos a la tabla name_2010_52 o name_2011_01, no name_2011_52 como lo hace ahora cuando concanoco los resultados para formar la consulta para la tabla.

¿Alguna solución elegante a este problema?

+0

Por ejemplo, ¿hay algún modo especificar que cuando se introduce una fecha, se devolverá el número de la semana y el año del último día de la semana específico? – Joshua

Respuesta

15

La función to_char() le permitirá a format a date or timestamp para dar salida a corregir la semana iso y años iso.

SELECT to_char('2011-01-01'::date, 'IYYY_IW') as iso_year_week; 

producirá:

iso_year_week 
--------------- 
2010_52 
(1 row) 
+0

Es el año de numeración de semana ISO (semana-año-año). – Alex78191

-2

Se puede usar un CASO:

WITH sub(field) AS (
    SELECT CAST('20110101' AS date) -- just to test 
) 
SELECT 
    CASE 
     WHEN EXTRACT (WEEK FROM field) > 1 AND EXTRACT (MONTH FROM field) = 1 AND EXTRACT (DAY FROM field) < 3 THEN 1 
    ELSE 
     EXTRACT (WEEK FROM field) 
    END 
FROM 
    sub; 
+0

Gracias, pero preferiría tener algún código que lo haga sin codificar para "excepciones". ¿Alguien podría insinuar una solución basada en mi propio comentario para la pregunta? – Joshua

Cuestiones relacionadas