Regex postgres将字符转换为日期时间
好的,伙计们,我正在尝试根据文本文件名转换字符。使用正则表达式提取的名称。在8月21日这一天到来之前,它一直运转良好Regex postgres将字符转换为日期时间,regex,postgresql,Regex,Postgresql,好的,伙计们,我正在尝试根据文本文件名转换字符。使用正则表达式提取的名称。在8月21日这一天到来之前,它一直运转良好 select to_char( to_date( regexp_replace( regexp_replace( regexp_replace( regexp_replace( regexp_replace( s
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中的日期格式。你有什么我们要做的就是告诉它确切的格式,以便它能够编译