提取日和月时领先零

时间:2018-01-19 09:40:57

标签: postgresql

您好我正在尝试在查询中提取当前日期和月份。此查询从csv文件填充表。 该文件的名称如下:

  

LOG_01_01_2018.csv

我的查询搜索文件:

  

LOG_1_1_2018.csv

前天和月份没有零。 如何添加零号?

以下是代码:

 execute format ($f$COPY tmp_x FROM 'D:\Programs\PS\download_files_from_ftp_avtomat\files\LOG_%s_%s_%s.csv' 
(header, FORMAT CSV, DELIMITER ',', NULL ' ', ENCODING 'WIN1251');
$f$,extract(day from now()),extract(month from now()),extract(year from now()));

3 个答案:

答案 0 :(得分:1)

一个选项使用LPAD

execute format ($f$COPY tmp_x FROM 'D:\Programs\PS\download_files_from_ftp_avtomat\files\LOG_%s_%s_%s.csv'
(header, FORMAT CSV, DELIMITER ',', NULL ' ', ENCODING 'WIN1251');
$f$,
    lpad(extract(day from now())::text, 2, '0'),
    lpad(extract(month from now())::text, 2, '0'),
    extract(year from now()));

除非您计划处理计算机出现之前存在的数据,否则年份将始终为固定宽度的四位数字。

答案 1 :(得分:1)

https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT

extract(field from timestamp)会返回double precision,因此您要么lpad为零(创建值文本),要么只使用to_char数据掩码,例如:

t=# select extract(day from now()), to_char(now(),'MM'),extract(year from now());
 date_part | to_char | date_part
-----------+---------+-----------
        19 | 01      |      2018
(1 row)

答案 2 :(得分:1)

使用to_char()短一些:

SELECT to_char(now(),'DD')||'/'||to_char(now(),'MM')||'/'||to_char(now(),'YYYY')