Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex postgres将字符转换为日期时间_Regex_Postgresql - Fatal编程技术网

Regex postgres将字符转换为日期时间

Regex postgres将字符转换为日期时间,regex,postgresql,Regex,Postgresql,好的,伙计们,我正在尝试根据文本文件名转换字符。使用正则表达式提取的名称。在8月21日这一天到来之前,它一直运转良好 select to_char( to_date( regexp_replace( regexp_replace( regexp_replace( regexp_replace( regexp_replace( s

好的,伙计们,我正在尝试根据文本文件名转换字符。使用正则表达式提取的名称。在8月21日这一天到来之前,它一直运转良好

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
该代码将产生此错误

ERROR:  invalid value "Augu-21st" for "Month"
DETAIL:  The given value did not match any of the allowed values for this field.
**********错误**********

错误:“月”的值“Augu-21”无效 SQL状态:22007 详细信息:给定值与此字段的任何允许值都不匹配

我希望这个日期的结果是 20150821

我已经知道问题出在“st”上,因为有两个“st”,我只是在尝试最好的方法来解决这个问题


谢谢

我想您可以使用另一个正则表达式,我建议您尝试使用此正则表达式删除日期的序号,如:

(?<=[0-9])(?:st|nd|rd|th)

(?我认为您可以使用另一个正则表达式,我建议您尝试使用此正则表达式删除日期的序号,如:

(?<=[0-9])(?:st|nd|rd|th)

(?我从字符串中删除了日期,然后将其转换为当前格式的日期。然后您可以将其转换为所需格式的字符。干杯

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的长度。

我将日期从然后,将字符串转换为当前格式的日期。然后,使用所需格式将其转换为字符。干杯

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的长度。

就是这个吗?还是yo你正在查看文件名列表吗?如果你的文件名前缀是一致的,先删除“UserAndMasterPlanPer”,然后你就好了前缀是一致的唯一改变的是日期。对于另一个日期都好。当有两个“st”例如:August21stStrip off prefix和.txt时,问题就出现了,然后执行to_char(to_date('August21st2015',“Monthddthyyy”),“yyyyyymmdd”)如果你看一下上面的代码,我已经做了substr,只剩下“August21st2015“部分。我的问题是,我的正则表达式将发生冲突,因为有两个'st',我的代码抓住了第一个'st'。它将成为Augu-21,因此我的目标是August21-2015。是这一个吗?还是您正在查看文件名列表?如果您的文件名前缀一致,请删除“UserAndMasterPlanPer”首先,然后你是好的前缀是一致的唯一改变的是日期。与另一个日期都是好的。当有两个'st'例如:August21stStrip-off-prefix和.txt时,问题就出现了。然后do-to-char(to-date('August21st2015','MonthDDthYYYY'),'yyyyyymmd)如果你看一下上面的代码,我已经做了substr,只剩下“August21st2015”"部分。我的问题是我的正则表达式会有冲突,因为那里有两个“st”,我的代码会抓住第一个“st”。它将成为August-21,因此我的目标是August21-2015。我认为删除第一个日期的前缀将是最佳的。如果他的文件名有一个数字和那些匹配的值,它将捕获该数字,而不是带有此表达式的日期你将只删除序数,而不是像auguSTUser44theoryMasterPlanPerAugust22nd2015这样的其他部分……将被抓住这个名字是我所说的。这就是为什么我问他是否正在查看一个随机名字列表。这是一个很好的观点……我没有想到……我假设这个模式是规则的……嗨,谢谢你的建议。我尝试了这个regexp|u替换('August21st2015','(?:[0-9])(?:st | nd | rd | th'),-),并得到了这个“August2-2015”它错过了1。有什么建议吗?我认为首先删除日期的前缀是最好的。如果他的文件名有一个数字和那些匹配的值,它会捕捉到,而不是这个表达式中的日期,你将只删除序数,而不是像auguSTUser44theoryMasterPlanPerAugust22nd2015…这样的其他部分将被捕捉到nam上这就是我要说的。这就是为什么我问他是否正在查看一个随机姓名列表。这是一个很好的观点…我没有考虑它…我假设模式是规则的…嗨,谢谢你的建议。我尝试了这个regexp_替换('August21st2015','(?:[0-9])(?:st | nd | rd | th'),-),然后得到这个“August2-2015”它错过了1。有什么建议吗?thx的响应,但它得到了错误错误:语法错误在或接近“from”第1行:…bstring('userandmasterplaneperaugust21st2015.txt',来自20 fo…^******************错误*********错误:语法错误在或接近“from”SQL state:42601字符:76I打开一把小提琴现在就开始演奏它就像一个符咒一样。顺便问一下,'-24'的目的是什么?没有它还可以吗?已经很好了,先生,但我需要15分才能公开投票。顺便问一下,这个日期格式MonthDDthYYYY上的'th'的目的是什么?th的目的是postgres中的日期格式。你有什么e要做的是告诉它确切的格式,以便它理解。在这种情况下,响应的DDth FormatHx涵盖了第22\rd\nd etc,但它得到了错误错误:语法错误位于或接近“from”第1行:…bstring('UserAndMasterPlanPerAugust21st2015.txt',来自20 fo…^************错误*********错误:语法错误位于或接近“from”SQL state:42601字符:76I打开一把小提琴现在就开始演奏它就像一个符咒一样。顺便问一下,'-24'的目的是什么?没有它还可以吗?已经很好了,先生,但我需要15分才能公开投票。顺便问一下,这个日期格式MonthDDthYYYY上的'th'的目的是什么?th的目的是postgres中的日期格式。你有什么我们要做的就是告诉它确切的格式,以便它能够编译