2013-04-30 62 views
1

如何替換字符串的第12個字符,如果它等於'X' 例如,如果我有'ABXD1X354XJXOKJX';在這種情況下,我將用'Y'取代第12位的'X'。結果:「ABXD1X354XJYOKJX」替換字符串中的特定字符

我想用REGEXP_REPLACE功能點12字符,如果測試是等於「X」,如果是用「Y」代替它,但它比我想象的

回答

1

不知道更多的是如何構成的字符串,這應該工作:

-- matches: 
select regexp_replace('12dasdf32432Xasdasd', '([[:alnum:]]{11})(X{1})', '\1Y') from dual 
union 
-- doesn't match: 
select regexp_replace('12dasdf32432Zasdasd', '([[:alnum:]]{11})(X{1})', '\1Y') from dual 
+1

太好了,這正是我在找的東西,字符串是字母數字 – Djoz 2013-04-30 19:12:50

0

更復雜爲此,使用SUBSTR函數可能會很容易。

實施例中,如果UPPER(SUBSTR( 'ABXD1X354XJYOKJX',12,1))= 'X'

1

可以這樣做:

CASE SUBSTR(yourfield, 12, 1) WHEN 'X' THEN 'Y' END 

並添加根據需要級聯

3

這你應該使用SUBSTR的工作:

select 
    substr('ABXD1X354XJXOKJX', 1, 11) || 
    case when substr('ABXD1X354XJXOKJX', 12, 1) = 'X' THEN 'Y' ELSE substr('ABXD1X354XJXOKJX', 12, 1) END || 
    substr('ABXD1X354XJXOKJX', 13) 
from dual 

SQL Fiddle Demo

+1

感謝那些工作!我認爲有一種方法可以直接替換第12個字符,而不必連接 – Djoz 2013-04-30 19:05:24

+1

@DJozef - np,很高興我能幫上忙!這可以用regexp_replace完成,但我認爲這是一個更清潔的解決方案。 – sgeddes 2013-04-30 19:10:13