Tengo esta tabla con una columna de fecha:
| fecha | hora | fol |
|---|---|---|
| 2022-03-04 | 16:40 | 1 |
| 2022-04-05 | 18:20 | 2 |
| 2022-04-06 | 13:20 | 3 |
Necesito extraer el año y el mes que usé, así que usé esta consulta:
select fecha, extract(month from fecha) = 3 as mes, EXTRACT(YEAR FROM fecha) = 2022 as anio, hora, folio from table;Yo obtengo:
| fecha | mes | año | hora | fol |
|---|---|---|---|---|
| 2022-03-04 | verdadero | verdadero | 16:40 | 1 |
| 2022-04-05 | falso | verdadero | 18:20 | 2 |
| 2022-04-06 | falso | verdadero | 13:20 | 3 |
Solo necesito las filas donde mes y anio son true , pero la cláusula WHERE no reconoce a mes y anio como columnas de la tabla.
En cambio, recibí el siguiente error:
ERROR: column "mes" does not exist LINE 1: ..._medicion from medicion where r_fisico = true and mes = true... ^ SQL state: 42703 Character: 353 Necesito estos valores para un <input type='month' />
Un enfoque utilizando sub-consulta.
Básicamente, ajuste su consulta con otra selección y coloque la condición WHERE afuera.
SELECT * FROM ( SELECT fecha, EXTRACT(MONTH FROM fecha) = 3 AS mes, EXTRACT(YEAR FROM fecha) = 2022 AS anio, hora, folio FROM table ) t WHERE t.anio = true and t.mes = true;Su problema se deriva de la secuencia en que se procesa cada fase de la instrucción SQL. El alias de la columna se asigna a medida que se procesa la list de selección, sin embargo, la cláusula where se procesa antes que la list de selección. Por lo tanto, el alias asignado no existe cuando se procesa la cláusula where . Básicamente tienes tres opciones:
Extraiga los valores (con alias) en una subselección (o CTE) y luego seleccione con where hace referencia al alias.
select * from ( select fecha , extract(month from fecha) = 3 as mes , extract(year froM fecha) = 2022 as anio , hora , folio from table ) where mes = true and anio = true;Repita la evaluación para mes y anio (sin el alias real).
select fecha , extract(month from fecha) = 3 as mes , extract(year froM fecha) = 2022 as anio , hora , folio from table where extract(month from fecha) = 3 and extract(year froM fecha) = 2022 ; Reescriba con where haciendo referencia solo a la fecha en sí.
select fecha , extract(month from fecha) = 3 as mes , extract(year froM fecha) = 2022 as anio , hora , folio from table where date_trunc('month', fecha) = date '2022-03-01';Nota Ninguno probado.