问题描述
嗨,克里斯,
我想通过调整输入字符串中的所有数字 (在下面的示例中的 'MFT' 之后) 来限制输入字符串的长度为8个字符。
表示,想要容纳字符串中的所有数字。
Ex.1。输入字符串为 “MFT123456”-9个字符字符串
预期输出应为: 'mf123456 '-通过删除单个字符 'T' 并将所有数字向左移动,将字符串限制为8个字符。
Ex.2. 输入字符串为 “LCC1234567”
预期输出字符串 = 'l1234567'
我试图使用下面的逻辑来实现这一点。但它不适用于第二个示例,并为此寻找动态解决方案。
当长度 ('mft123456')> 8时选择大小写
当SUBSTR ('mft123456 ',1,3) = 'MFT',然后SUBSTR ('mft123456',1,2) | | SUBSTR ('mft123456 ',4)
结束
结束 AS PIN;
我想通过调整输入字符串中的所有数字 (在下面的示例中的 'MFT' 之后) 来限制输入字符串的长度为8个字符。
表示,想要容纳字符串中的所有数字。
Ex.1。输入字符串为 “MFT123456”-9个字符字符串
预期输出应为: 'mf123456 '-通过删除单个字符 'T' 并将所有数字向左移动,将字符串限制为8个字符。
Ex.2. 输入字符串为 “LCC1234567”
预期输出字符串 = 'l1234567'
我试图使用下面的逻辑来实现这一点。但它不适用于第二个示例,并为此寻找动态解决方案。
当长度 ('mft123456')> 8时选择大小写
当SUBSTR ('mft123456 ',1,3) = 'MFT',然后SUBSTR ('mft123456',1,2) | | SUBSTR ('mft123456 ',4)
结束
结束 AS PIN;
专家解答
我们可以查找第一个数字的位置,并将其与长度进行比较
SQL> with t as 2 ( select 'MFT123456' x from dual union all 3 select 'LCC1234567' x from dual ) 4 select 5 substr(x,1,7-length(x)+regexp_instr(x,'\d'))|| regexp_substr(x,'\d+') str 6 from t; STR -------------------------------------------------------------------------------- MF123456 L1234567复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。