oracle - 从表数据值中间删除 varchar2 字符串

标签 oracle oracle11g

生成表的file_name字段中的数据应该是指定的编号,然后是_01、_02或_03等,然后是.pdf(例如82617_01。 pdf)。

程序在指定的数字和 01、02 等之间放置州名称,有时还放置日期/时间戳(82617_ALABAMA_01.pdf 或 19998_MAINE_07-31-2010_11-05-59_AM.pdf 或 5485325_OREGON_01 .pdf 例如)。

我们想开发一个 SQL 语句来查找错误的文件名并修复它们。理论上,查找包含 varchar2 数据类型的文件名并将其删除似乎相当简单,但将语句放在一起却超出了我的能力范围。

任何帮助或建议表示赞赏。

类似于:

UPDATE GENERATION

SET FILE_NAME (?)

WHERE FILE_NAME (?...LIKE '%STRING%');?

最佳答案

您可以像这样找到问题行:

select *
from Files
where length(FILE_NAME) - length(replace(FILE_NAME, '_', '')) > 1

您可以像这样修复它们:

update Files
set FILE_NAME = SUBSTR(FILE_NAME, 1, instr(FILE_NAME, '_') -1) ||
    SUBSTR(FILE_NAME, instr(FILE_NAME, '_', 1, 2))
where length(FILE_NAME) - length(replace(FILE_NAME, '_', '')) > 1

SQL Fiddle Example

关于oracle - 从表数据值中间删除 varchar2 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13160563/

相关文章:

java - XPath 歧义

java - oracle中的CLOB不允许插入超过4000个字符的数据

sql - 处理连续行计算

sql - 规范化 ORACLE 11g 中的列名

sql - Db2/Oracle-无法去掉空格

sql - 如何查询GROUP BY一年中的月份

sql - 计算每种类型每天插入的行数

mysql - 符合多个数据库的在线 SQL 语法检查器

sql - Oracle 转换错误时默认为 null - 时间戳

oracle - oracle DATE 和 TIMESTAMP 的区别