SQL> UPDATE area SET status='2' WHERE to_char(areaid) IN replace('301A302A303A304A305','A',',');0 rows updatedSQL> rollback;Rollback completeSQL> 我只是抛砖引玉,仅供参考。
这个WHERE to_char(areaid) IN replace('301A302A303A304A305','A',','); 应该是to_char(areaid)在in 后面的若干个值的范围里 这里的replace...虽然将字符串变化成'x,x,x,x,x'形式,但本质上还只是一个字符串,不能达到想要的效果
按suiziguo的理解,我认为可以稍微改下 UPDATE area SET status='2' WHERE ','||replace('301A302A303A304A305','A',',')||',' like '%,'||to_char(areaid)||',%';
主要的工作是把你那个由字符A分割的数字字符串拆成单独的数字,方法如下: UPDATE TABLE1 SET NEED = 'Y' WHERE ID IN (SELECT SUBSTR('A' || S || 'A', INSTR('A' || S || 'A', 'A', 1, ROWNUM) + 1, INSTR('A' || S || 'A', 'A', 1, ROWNUM + 1) - INSTR('A' || S || 'A', 'A', 1, ROWNUM) - 1) o FROM (SELECT '数字1A数字2A数字3A数字4A数字5' S FROM DUAL) CONNECT BY ROWNUM <= LENGTH(S) - LENGTH(REPLACE(S, 'A')) + 1);
WHERE to_char(id) IN replace('数字A数字A数字A数字A数字','A',',');commit;
其人多次挑衅
http://topic.csdn.net/u/20100225/14/A73B7C1A-0685-48C0-AC98-137225F7F0BF.html
应该是to_char(areaid)在in 后面的若干个值的范围里
这里的replace...虽然将字符串变化成'x,x,x,x,x'形式,但本质上还只是一个字符串,不能达到想要的效果
UPDATE area SET status='2' WHERE ','||replace('301A302A303A304A305','A',',')||',' like '%,'||to_char(areaid)||',%';
主要的工作是把你那个由字符A分割的数字字符串拆成单独的数字,方法如下:
UPDATE TABLE1
SET NEED = 'Y'
WHERE ID IN
(SELECT SUBSTR('A' || S || 'A',
INSTR('A' || S || 'A', 'A', 1, ROWNUM) + 1,
INSTR('A' || S || 'A', 'A', 1, ROWNUM + 1) -
INSTR('A' || S || 'A', 'A', 1, ROWNUM) - 1) o
FROM (SELECT '数字1A数字2A数字3A数字4A数字5' S FROM DUAL)
CONNECT BY ROWNUM <= LENGTH(S) - LENGTH(REPLACE(S, 'A')) + 1);