在转换为日期后提取年份在Postgresql中有问题



我有一个列,这是字符串数据类型,但持有日期值。我将其转换为DATE,然后在POSTGRESQL中使用以下格式从中提取YEAR。然而,如果我试图获取最近10年的数据,我看到任何小于最近50年的日期(即小于1970年,采用2069、2068等格式)。假设有一个日期值的格式为(10/1/58,尽管将过去10年的过滤器设置为2058,但它仍被列出)

我使用下面的代码转换为DATE并提取年份

extract YEAR FROM  TO_DATE(release_date,'MM/DD/YY')

然后在我的查询中使用下面的条件来获取最近10年的数据

where  extract(year from current_timestamp)-EXTRACT(YEAR FROM  TO_DATE(release_date,'MM/DD/YY')) <=10

POSTGRESQL如何解决这个问题

嗯:

select extract(year from current_timestamp);
date_part 
-----------
2021
select EXTRACT(YEAR FROM  TO_DATE('10/1/58','MM/DD/YYYY'));
date_part 
-----------
58
select 2021 - 58;
?column? 
----------
1963
1963 ! <= 10

您最好的选择是通过将YY转换为YYYYand better yet by storing in a日期'字段而不是作为字符串来清理日期数据。

因为这是有记录的行为

使用一个函数来确定年份

CREATE TABLE mytable(release_date varchar(20))
INSERT INTO mytable VALUES ('01/01/69'),('01/01/70')
CREATE OR REPLACE FUNCTION corectyear(inyear integer) RETURNS integer AS $$
DECLARE curyear INTEGER;
BEGIN
SELECT extract( YEAR FROM  CURRENT_DATE) INTO curyear;
IF inyear > curyear THEN
RETURN inyear - 100;
ELSE
RETURN inyear;
END IF;

END;
$$ LANGUAGE plpgsql;
SELECt corectyear(extract( YEAR FROM  TO_DATE(release_date,'MM/DD/YY'))::INTEGER) FROM mytable
|正确年份|| ---------: || 1969 || 1970 |

db<此处小提琴>

最新更新