Имя: Пароль:
1C
 
Преобразование строки в число в запросе. Критикуем, оптимизируем
0 andrewks
 
25.11.11
10:02
навеяно Книга знаний: v8: Операции преобразования Число в Строку и обратно в запросах

в честь пятницы возникла мысль: написать преобразование с нединамическим текстом запроса, а универсальным, пусть пакетным

пока получилось вот что:


select
&Парам1 as str
into tt1

;

select
0 as num
,"0" as numstr
,1 as deg
into digits
union select 1,"1",10 union select 2,"2",100 union select 3,"3",1000 union select 4,"4",10000 union select 5,"5",100000
union select 6,"6",1000000 union select 7,"7",10000000 union select 8,"8",100000000 union select 9,"9",1000000000

;

select
digits1.num+digits2.num+digits3.num as num
,digits1.deg*digits2.deg*digits3.deg as deg
into degs10
from
digits as digits1
,digits as digits2
,digits as digits3
group by
digits1.num+digits2.num+digits3.num
,digits1.deg*digits2.deg*digits3.deg
index by num

;

select
digits1.num+10*digits2.num as num
,digits2.numstr+digits1.numstr as numstr
into numbers
from
digits as digits1
,digits as digits2
index by num

;

select
substring(tabstr.str,numbers.num,1) as symb
,numbers.num as pos
into symbstr
from
tt1 as tabstr
left join
numbers
on (numbers.num>0) and (substring(tabstr.str,numbers.num,1)<>"") and (substring(tabstr.str,numbers.num,1)<>" ")

;

select
symbstr.symb as symb
,symbstr.pos as pos
,count(symbstr.pos) as ind
into symbols
from
symbstr
inner join symbstr as symbstr1
on (symbstr.pos<=symbstr1.pos)
group by
symbstr.symb
,symbstr.pos

;

select
sum(degs.deg*digits.num)
from
symbols
inner join digits
on (symbols.symb=digits.numstr)
inner join degs10 as degs
on (symbols.ind-1=degs.num)
group by null




обрабатывает целые положительные мысли

осталось допилить для отрицательных и дробных
1 andrewks
 
25.11.11
10:03
*обрабатывает целые положительные числа
:)
2 IamAlexy
 
25.11.11
10:05
на английском написал потому что стыдишься за то что подался в 1Сники и пытаешься сохранить иллюзию того что программируешь на настоящем языке?

троллят тебя "старшие братья" программирующие на "настоящем" пыхыпы?
3 andrewks
 
25.11.11
10:06
(2) мне так удобнее. верхний регистр в запросах мне, например, режет глаз намного сильнее, чем английский.
+ ближе к скулю
4 IamAlexy
 
25.11.11
10:08
(3) а в запросах по типовым объектам - раскладку передергиваешь?
тоже типа удобнее?
5 Armando
 
25.11.11
10:09
(2) это понтЫ.

ИМХА, если есть необходимость конвертить строки в числа, то скорее всего у вас ошибка в структуре таблиц
6 Rie
 
25.11.11
10:10
(2) У него вопросы - не только по 1С, это скорее "чистый" SQL.
7 andrewks
 
25.11.11
10:10
(4) а тебя, значит, ЧтениеXML и COMОбъект не ломает писать?

хватит троллить и оффтопить, если есть что по делу - буду рад послушать
(5) смотрим на секцию
8 IamAlexy
 
25.11.11
10:11
(7) ты на вопрос не ответил.. в типовой УТ запросы как пишешь?
9 IamAlexy
 
25.11.11
10:12
(7) частота использования запросов по сравнению с ЧтениеXML и COMОбъект несколько все же другая...
10 Поручик
 
25.11.11
10:14
(7) Это у ТС 22 см изо всех щелей прут.
(0) Напиши нормально, 95% здешней тусы нихрена не поймут.
11 hhhh
 
25.11.11
10:15
(7) ну просто вряд ли кто-то будет читать это. Всё равно, что обфускатором прошелся. Везде одно унылое слово "digits".
12 kittystark
 
25.11.11
18:16
а не проще через функцию регулярку воткнуть типа ^\-?\d+(?:[.,]\d+)?$ а потом сделать явное преобразование типа ?
13 andrewks
 
25.11.11
22:35
(12) регэкспы в запросе? это как? пример есть?
14 ДенисЧ
 
25.11.11
22:37
мама, роди меня обратно...
15 milan
 
25.11.11
22:43
(3) За такое оформление кода руки выдергивать надо и вставлять в нужное место
16 andrewks
 
25.11.11
23:23
все высказались?
17 МихаилМ
 
25.11.11
23:26
(0)
зачем это нужно ?
кроме тренировки ума.
18 andrewks
 
25.11.11
23:29
(17) больше незачем. так, руку набить, форумчан развлечь
19 andrewks
 
25.11.11
23:36
ы-ы-ы... сделал, вроде )

надо потестировать
20 andrewks
 
25.11.11
23:41
надо же, работает. неожиданно
21 Лефмихалыч
 
26.11.11
00:02
(0) на кой ляд оно надо? для тех. кому религия запрещает числа хранить, как числа?
22 Злопчинский
 
26.11.11
00:04
(21) я в свое время испытал жесточайшее потярсение когда обнаружил что в DBF числа хранятся как строки...
23 andrewks
 
26.11.11
00:04
(21) "случаи - они разные бывают..." ©
:)
24 Лефмихалыч
 
26.11.11
00:06
(22) на кой нужен дбф в наш бурный 21-й век, я тоже слабо понимаю
(23) говорят, с возрастом - все реже и реже
25 SeraFim
 
28.11.11
05:21
видел вот такой вот ужас:
   //Было Коэф = 12.3456;
   КоэфС = строка(Коэф);
   н = Найти(КоэфС,".")+2;
   КоэфС = Лев(КоэфС,н);
   Коэф =  Число(КоэфС);
   //получаем Коэф=12.34;
26 guitar_player
 
28.11.11
07:20
(25) ы)))
27 andrewks
 
28.11.11
08:14
(25) фигня. в запросе сделай ;-)
28 Гефест
 
28.11.11
08:28
До чего кривая платформа доводит...
29 Escander
 
28.11.11
08:44
Сколько-ж прикольных веток в пятницу было создано!!!

(28)тут кривизна в мозгах а не в платформе... если микроскопом можно не только микробов смотреть а ещё и гвозди забивать(недокументированная фича) - будет использовать именно микроскоп для забивки гвоздей?
30 andrewks
 
28.11.11
08:47
(29) ну-ка давай, как сделать сабж, не прибегая к забиванию гвоздей микроскопом?  или так, поумничать зашёл?
31 Defender aka LINN
 
28.11.11
09:08
(30) Сабж, т.е. преобразование из строки в число, в запросе без извращений не сделаешь, факт. Но сам факт того, что нужны такие преобразования, говорит о кривости решения.
32 Поручик
 
28.11.11
09:12
(31) Чем бы дитя ни тешилось... лишь бы руки под одеялом не держало.
33 Escander
 
28.11.11
09:14
(30) в (25)жёсткая эротика, а предложение это сделать в запросе - порно!

Какой смысл всё это делать в запросе? С методологией всё нормально?
34 andrewks
 
28.11.11
09:21
ну какая нафиг методология?
такие большие и умные, а читать не умеете.
см. внимательно сабж, секцию, а для особо одарённых  -  (18)

я никого насильно не заставляю, но нафига по сто раз повторять: руки кривые, решение кривое, гвозди микроскопом, и т.д.?

есть задачка, алгоритмическая, у кого есть желание и время поразмяться - милости прошу (я сам уже решил, но надеюсь, что кто-то решит более элегантно)

ЗЫ

ышо раз - для самых взрослых и умных - задачка не имеет прикладного применения (по крайней мере, для меня), и должна рассматриваться только в качестве зарядки для ума
35 Escander
 
28.11.11
09:23
(34)если такой умный - не надо было писать v8
36 Поручик
 
28.11.11
09:24
(34) Лучше заведи специальный блог и пускай туда только по инвайту, а то мистобомонд так и будет объедками закидывать.
37 andrewks
 
28.11.11
09:24
(35) интересно - почему? если задачка для языка запросов 1с 8?
38 andrewks
 
28.11.11
09:25
(36) тебе инвайт не дам, даже не рассчитывай
39 Поручик
 
28.11.11
09:28
(38) Я и не рассчитываю, спасибо хоть здесь не забанил. Встретишься ты мне в голодный год.
40 andrewks
 
28.11.11
09:31
(39) говорят, от мании преследования может помочь хороший психиатр
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.