Имя: Пароль:
1C
1С v8
Как от строки внутри запроса отрезать последние 9 символов
,
0 Adgjj
 
10.08.12
13:52
Скажите, пжл, Как от строки внутри запроса отрезать последние 9 символов?
1 Maxus43
 
10.08.12
13:53
длинна известна? никак если нет
2 Maxus43
 
10.08.12
13:53
в СКД можно
3 Adgjj
 
10.08.12
13:54
ну ладно, тогда после запроса отрежу
4 Rebelx
 
10.08.12
13:58
(1) а если известна?
5 Maxus43
 
10.08.12
14:00
(4) ПОДСТРОКА
6 Нуф-Нуф
 
10.08.12
14:00
конкатенация
7 Maxus43
 
10.08.12
14:01
(6) не ругайся
8 Classic
 
10.08.12
14:02
(4)
ВЫРАЗИТЬ( Чтототам КАК Строка(Длина - 9))
9 Нуф-Нуф
 
10.08.12
14:03
(7) а че, прикольное слово
10 Maxus43
 
10.08.12
14:10
(9) тока значит другое)
11 Reset
 
10.08.12
15:15
(1) в ПЯТНИЦУ можно:


ВЫБРАТЬ
   0 КАК Длина
ПОМЕСТИТЬ Ч

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   9
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВЫРАЗИТЬ(Ч.Длина * 100 + Ч2.Длина * 10 + Ч3.Длина КАК ЧИСЛО) КАК Длина
ПОМЕСТИТЬ Длины
ИЗ
   Ч КАК Ч
       ПОЛНОЕ СОЕДИНЕНИЕ Ч КАК Ч2
           ПОЛНОЕ СОЕДИНЕНИЕ Ч КАК Ч3
           ПО (ИСТИНА)
       ПО (ИСТИНА)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Кассы.Наименование,
   МАКСИМУМ(Длины.Длина) КАК Длина
ПОМЕСТИТЬ КассыСДлинами
ИЗ
   Справочник.Кассы КАК Кассы
       ЛЕВОЕ СОЕДИНЕНИЕ Длины КАК Длины
       ПО ((ВЫРАЗИТЬ(ПОДСТРОКА(Кассы.Наименование, 1, Длины.Длина) КАК СТРОКА(1000))) = (ВЫРАЗИТЬ(ПОДСТРОКА(Кассы.Наименование, 1, Длины.Длина + 1) КАК СТРОКА(1000))))
           И ((ВЫРАЗИТЬ(ПОДСТРОКА(Кассы.Наименование, 1, Длины.Длина) КАК СТРОКА(1000))) <> (ВЫРАЗИТЬ(ПОДСТРОКА(Кассы.Наименование, 1, Длины.Длина - 1) КАК СТРОКА(1000))))

СГРУППИРОВАТЬ ПО
   Кассы.Ссылка,
   Кассы.Наименование
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   КассыСДлинами.Наименование,
   ПОДСТРОКА(КассыСДлинами.Наименование, 1, КассыСДлинами.Длина - 9) КАК НаименованиеБезПоследних9
ИЗ
   КассыСДлинами КАК КассыСДлинами
12 andrewks
 
10.08.12
15:17
(1) можно
13 Classic
 
10.08.12
15:18
(11)
А если длина больше 1000?
14 andrewks
 
10.08.12
15:18
(11) чё-то ты слишком много нахреновертил. можно же проще
15 Reset
 
10.08.12
15:18
(13) Тогда не сработает ;P
16 Reset
 
10.08.12
15:18
(14) Вполне может быть, я торопился
17 Classic
 
10.08.12
15:19
(14)
Показуй
18 andrewks
 
10.08.12
15:20
(17) щас мне некогда. после 17:00, если ещё актуально будет
19 Classic
 
10.08.12
15:25
(18)
Общая идея какая?
20 andrewks
 
10.08.12
17:23
(19) примерно так:


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

21 Reset
 
10.08.12
17:37
(20) (substring(tabstr.str,numbers.num,1)>"")
Короче и читабельней, респект :)