您好我正在尝试在查询中提取当前日期和月份。此查询从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()));
答案 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')