我有一个int型的字段,我现在想把这个字段的任意一个位置为一个数字,该怎么写?
例如:
Field = 1, Set(Field, 3, 1) = 101 ;//第3位置为1
Field = 100, Set(Field, 1, 1) = 101;//第一位置为1
Field = 10111, Set(Field, 4, 1) = 11111;//第4位置为1不知道SQL语句怎么写
例如:
Field = 1, Set(Field, 3, 1) = 101 ;//第3位置为1
Field = 100, Set(Field, 1, 1) = 101;//第一位置为1
Field = 10111, Set(Field, 4, 1) = 11111;//第4位置为1不知道SQL语句怎么写
case?
这些都可以。
把要取得位数和要替换的数通过变量的形式来表示,用decode函数,首先传入变量,然后取要改变的字段,从变量1的位置开始取,取一个数用replace函数替换为要替换的变量2,如果变量1超过了字段的长度,则返回原filed,eg:
decode(filed,变量1,replace(substr(‘filed’,变量1,1),变量2),filed)
Field = 100, Set(Field, 1, 1) = 101;//第一位置为1
Field = 10111, Set(Field, 4, 1) = 11111;//第4位置为1 这么说吧,
Set(Filed, 4, 1) = 11111的意思,就是
原来的数字我们假设为ABCDEFG
就是把D换成XXXXX,这个意思是吗?
就是原来的ABCDEFG换成ABC + XXXXX + EFG。这个对吧。
这个不是很容易的吗?substr都可以做到。
decode的,是让你判断,什么时候修改的。就是1,100,10111的时候。做什么处理。
-1, RPAD (3, 4 - LENGTH (10111), 0) || 10111,
SUBSTR (10111, 1, LENGTH (10111) - 4)
|| 3
|| SUBSTR (10111, LENGTH (10111) - 4 + 2)
)
FROM DUAL
/* Formatted on 2007/10/31 11:36 (Formatter Plus v4.8.7) */
SELECT DECODE (SIGN (LENGTH (10111) - 4),
-1, RPAD (3, 4 - LENGTH (10111), 0) || 10111,
SUBSTR (10111, 1, LENGTH (10111) - 4)
|| 3
|| SUBSTR (10111, LENGTH (10111) - 4 + 2)
)
FROM DUAL
--设置一个字段十万位为3
set Field = 3 * 100000 + Field - mod(floor(Field/ 100000), 10) * 100000
--设置一个字段万位为3
set Field = 3 * 10000 + Field - mod(floor(Field/ 10000), 10) * 10000