如何使用Regex从字符串中剥离结束日期?-SQL



我想以特定的格式格式化表列中的字符串。

输入表:

file_paths
my-file-path/wefw/wefw/2022-03-20
my-file-path/wefw/2022-01-02
my-file-path/wef/wfe/wefw/wef/2021-02-03
my-file-path/wef/wfe/wef/

我想删除最后一个/符号之后的所有内容,如果它之后的唯一内容类似于日期(即YYYY MM-dd或###-###-##(。

输出:

file_paths
my-file-path/wefw/wefw/
my-file-path/wefw/
my-file-path/wef/wfe/wefw/wef/
my-file-path/wef/wfe/wef/

我正在考虑做一些类似的事情:

SELECT regexp_replace(file_paths, 'regex_here', '', 1, 'i')
FROM my_table

不过,我不确定如何为此编写RegEx。如果有更简单的字符串操作方法的话,我也愿意接受。提前感谢!

您可以使用

REGEXP_REPLACE ( file_paths, '/[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$', '/' )

请参阅regex演示。

/[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}$是符合POSIX ERE的模式匹配

  • /-斜线
  • [0-9]{4}-四位
  • --连字符
  • [0-9]{1,2}-一位或两位
  • -[0-9]{1,2}-连字符和一个或两个数字
  • $—字符串结束

如果您的值可以包含尾随空格,请在$:/[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}[[:space:]]*$之前插入[[:space:]]*

您可以使用以下正则表达式:

^(.*?/)d{4}-d{2}-d{2}$

您可以尝试以下查询:

select regexp_replace(file_paths, '^(.*?/)\d{4}-\d{2}-\d{2}$','$1')

演示

相关内容

  • 没有找到相关文章

最新更新