const int width = 4;
void test(int&){}
int main() {
test(width);
}
该代码将产生此错误。
select to_char(
to_date(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
regexp_replace(
substr('UserAndMasterPlanPerAugust21st2015.txt',21),
'.txt',''),
'rd','-'),
'th','-'),
'nd','-'),
'st','-'),
'MonthDD-YYYY'),
'YYYYMMDD')::integer
**********错误**********
错误:“月”的无效值“Augu-21st” SQL状态:22007 细节:给定值与此字段的任何允许值都不匹配。
我希望这个日期的结果是 20150821
我已经知道问题出在'st'上,因为有两个'st',我只想尝试解决这个问题的最佳方法。
由于
答案 0 :(得分:0)
我认为你可以使用另一个正则表达式,我建议你尝试使用这个来删除日期中的序数:
(?<=[0-9])(?:st|nd|rd|th)
你只需要将它转移到postgres方言......
答案 1 :(得分:0)
我从字符串中删除了日期,然后将其转换为当前格式的日期。然后转换为具有所需格式的char。干杯!
select to_char(
to_date(
substring('UserAndMasterPlanPerAugust21st2015.txt'
from 21 for length('UserAndMasterPlanPerAugust21st2015.txt')-24
), 'MonthDDthYYYY'), 'YYYYMMDD');
-24的目的是因为我只想向右移动日期所在的空格数。如果总长度为n,我从21开始,这意味着我还剩下n-20个字符。我想删除.txt,所以移动4个空格。因此我想从21 - >开始到字符串-24的长度。