我有一个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语句怎么写

解决方案 »

  1.   

    decode?
    case?
    这些都可以。
      

  2.   

    用DECODE函数,或者CASE等等,都可以做到。
      

  3.   

    字段是固定的,第一位、第四位也是固定的;我的Set(Filed, 4, 1) = 11111,只是说明一个函数,问题是这个函数的功能怎么用SQL语句表达出来。
      

  4.   

    我的思路是,首先把set(filed,变量1,变量2)
    把要取得位数和要替换的数通过变量的形式来表示,用decode函数,首先传入变量,然后取要改变的字段,从变量1的位置开始取,取一个数用replace函数替换为要替换的变量2,如果变量1超过了字段的长度,则返回原filed,eg:
    decode(filed,变量1,replace(substr(‘filed’,变量1,1),变量2),filed)
      

  5.   

    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 这么说吧,
    Set(Filed, 4, 1) = 11111的意思,就是
    原来的数字我们假设为ABCDEFG
    就是把D换成XXXXX,这个意思是吗?
    就是原来的ABCDEFG换成ABC + XXXXX + EFG。这个对吧。
    这个不是很容易的吗?substr都可以做到。
    decode的,是让你判断,什么时候修改的。就是1,100,10111的时候。做什么处理。
      

  6.   

    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
      

  7.   

    Field   =   10111,   Set(Field,   4,   3)   =   13111/* Formatted on 2007/10/31 11:19 (Formatter Plus v4.8.7) */
    /* 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
      

  8.   

    我来公布答案了: 
    --设置一个字段十万位为3
     set Field =  3 * 100000 + Field - mod(floor(Field/ 100000), 10) * 100000
    --设置一个字段万位为3
     set Field =  3 * 10000 + Field - mod(floor(Field/ 10000), 10) * 10000
      

  9.   

    哈哈,看到LZ的答案,才知道LZ当初说的需求.赫赫.LZ需要好好补习中文,以及SET函数。