Играемся со строками в запросе

База знаний
  1. 10 г. назад

    Определяем длину строки:

    select
     &Парам1 as str
    into ВходнаяВТ
    
    ;
    // здесь создаём ВТ цифр
    
    select
     0 as num
    into digits
    union select 1 union select 2 union select 3 union select 4 union select 5
    union select 6 union select 7 union select 8 union select 9
    
    ;
    // здесь создаём ВТ чисел
    
    select
    // digits1.num+10*digits2.num+100*digits3.num as num
     digits1.num+10*digits2.num as num
    into numbers 
    from
     digits as digits1
    ,digits as digits2
    //,digits as digits3
    index by num
    
    ;
    
    // здесь определяем макс.позицию символа (т.е. длину строки)
    
    select
     tabstr.str
    ,max(numbers.num) as maxpos
    from
     ВходнаяВТ as tabstr
    ,numbers
    where (substring(tabstr.str,numbers.num,1)<>"")
    group by
     tabstr.str
    
    
    
    

    результат:

    query-res1.png

  2. Ты извращенец.
    Практический смысл какой? )))

    Ответы: (2)
  3. (1) забавы ради :)

  4. Спасибо пейсателям платформы за наше счастливое детство. То что в SQL делается одной строкой, в 1с челается через изврат

    Ответы: (4)
  5. (3)зато у Билли СОКРЛП() нет вот!!

  6. СОКРЛППНХЗБС()

  7. отрезаем определённое кол-во симовлов с конца строки:

    (на DB2 не пашет - как уже говорилось, спасибо пейсателям платформы)

    select 
     "первая строка123456789" as str
    into tabstr
    union all
    select "вторая строка999999999"
    union all
    select "какая-то там по счёту строка123123123"
     
    ;
    
    select
     0 as num
    into digits
    union select 1 union select 2 union select 3 union select 4 union select 5
    union select 6 union select 7 union select 8 union select 9
    
    ;
    
    select
     digits1.num+10*digits2.num+100*digits3.num+1000*digits4.num as num
    into numbers 
    from
     digits as digits1
    ,digits as digits2
    ,digits as digits3
    ,digits as digits4
    index by num
    
    ;
    
    select
     tabstr.str as str
    ,max(numbers.num) as length
    into tabstr2
    from
     tabstr
    ,numbers
    where (substring(tabstr.str,numbers.num,1)>"")
    group by
     tabstr.str
    
    ;
    
    select
     tabstr.str as str
    ,substring(tabstr.str,1,tabstr.length-9) as str_cut
    from
     tabstr2 as tabstr
    

    результат:
    query-res2.png

  8. разбиваем строку с разделителем на подстроки

    select
    // &SrcStr as str
     "а,аа,а,ааа,аа,ааааа,аа" as str
    into InpTbl
    
    ;
    // здесь создаём ВТ цифр
    
    select
     0 as num
    into digits
    union select 1 union select 2 union select 3 union select 4 union select 5
    union select 6 union select 7 union select 8 union select 9
    
    ;
    // здесь создаём ВТ чисел
    
    select
     digits1.num+10*digits2.num+100*digits3.num as num
    into numbers 
    from
     digits as digits1
    ,digits as digits2
    ,digits as digits3
    index by num
    
    ;
    // здесь разбираем входную строку, составляем таблицу позиций разделителей
    
    select 0 as pos
    into delimtbl
    union
    select
     numbers.num
    from
     InpTbl as tabstr
    left join
     numbers
    on (numbers.num>0) and (substring(tabstr.str,numbers.num,1)=",")
    union
    select
     max(numbers.num)+1
    from
     InpTbl as tabstr
    left join
     numbers
    on (numbers.num>0) and (substring(tabstr.str,numbers.num,1)>"")
    index by pos
    
    ;
    
    // здесь составляем таблицу позиций подстрок
    
    select
     delimtbl1.pos as pos1
    ,min(delimtbl2.pos) as pos2
    into delimstbl
    from
     delimtbl as delimtbl1, delimtbl as delimtbl2
    where (delimtbl2.pos>delimtbl1.pos)
    group by delimtbl1.pos
    
    ;
    
    // финал :)
    
    select
     substring(tabstr.str,delimstbl.pos1+1,delimstbl.pos2-delimstbl.pos1-1) as atom
    from
     InpTbl as tabstr
    left join
     delimstbl
    on (true) 

    результат:
    query-res3.png

  9. пишите по-русски в запросах

    Ответы: (10)
  10. да я это как TSQL воспринимаю, потом вижу &Парам1 и понимаю что 1с

  11. (8) у меня от русских ключевых слов в запросах когнитивный диссонанс.

    кто сначала робил в sql и 1С++ (прямые запросы) - тот поймёт.

    Ответы: (13)
  12. *тут написано много про профессионалов и специалистов, что надо развиваться, а не цепляться за старое, следовать стандартам разработки 1с и пр. пр*

    Ответы: (12)
  13. (11)
    *я старый стритовый пипл, и к жопе моей прилипл пацифика знак горячий, в глазах моих пляшет удача*

  14. (10)я робил но не пойму.

или зарегистрируйтесь чтобы ответить!