如何使用正则表达式从字符串中去除结束日期? - SQL

How to strip ending date from string using Regex? - SQL

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

输入table:

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

虽然我不确定如何为此编写正则表达式。如果有的话,我也愿意接受更简单的字符串操作方法。提前致谢!

您可以使用这个正则表达式:

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

您可以试试这个查询:

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

Demo

您可以使用

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

参见regex demo

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

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

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