您好,我正在尝试在查询中提取当前日期和月份。此查询是从 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)
一种选择使用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)
年份将始终是一个固定宽度的四位数字,除非您计划使用计算机出现之前存在的数据。
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)