我想以特定的格式格式化表列中的字符串。
输入表:
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')
演示