提取日和月时前导零

Hri*_*nov 6 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()));
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 8

一种选择使用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()));
Run Code Online (Sandbox Code Playgroud)

年份将始终是一个固定宽度的四位数字,除非您计划使用计算机出现之前存在的数据。


Vao*_*sun 5

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)
Run Code Online (Sandbox Code Playgroud)