Натолкнула на мысль заняться этой задачей недавно вышедшая публикация.
Задача усложняется, т.к. неизвестен формат исходной строки с числом и ее длина. Принял допущение, что длина числа 15 знаков и что число содержится где-то в конце.
В итоге получился следующий запрос:
ВЫБРАТЬ "1 234 567 890 123,45" КАК ЧислоСтрокой ПОМЕСТИТЬ ВТ_Оригинал
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "1234567890123456"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "000000"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "1"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "123"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ересь"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "ересь1"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "1,234520"
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
прав("00000000000000000"+ВТ_Оригинал.ЧислоСтрокой,20) КАК ЧислоСтрокой,
ВТ_Оригинал.ЧислоСтрокой КАК ЧислоСтрокойОригинал
ПОМЕСТИТЬ ВТ
из ВТ_Оригинал как ВТ_Оригинал
;
ВЫБРАТЬ 0 КАК Цифра,"0" КАК Символ ПОМЕСТИТЬ ВТ_Соответствие
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1, "1"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2, "2"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3, "3"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4, "4"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5, "5"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6, "6"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7, "7"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8, "8"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9, "9"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ".",","
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ".","."
;
ВЫБРАТЬ
ВТ.ЧислоСтрокойОригинал как ЧислоСтрокойОригинал,
ПРАВ("0000000000000000"+Выбор когда ВТ_1.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 1, 1) конец +
Выбор когда ВТ_2.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 2, 1) конец +
Выбор когда ВТ_3.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 3, 1) конец +
Выбор когда ВТ_4.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 4, 1) конец +
Выбор когда ВТ_5.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 5, 1) конец +
Выбор когда ВТ_6.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 6, 1) конец +
Выбор когда ВТ_7.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 7, 1) конец +
Выбор когда ВТ_8.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 8, 1) конец +
Выбор когда ВТ_9.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 9, 1) конец +
Выбор когда ВТ_10.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 10, 1) конец +
Выбор когда ВТ_11.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 11, 1) конец +
Выбор когда ВТ_12.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 12, 1) конец +
Выбор когда ВТ_13.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 13, 1) конец +
Выбор когда ВТ_14.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 14, 1) конец +
Выбор когда ВТ_15.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 15, 1) конец +
Выбор когда ВТ_16.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 16, 1) конец +
Выбор когда ВТ_17.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 17, 1) конец +
Выбор когда ВТ_18.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 18, 1) конец +
Выбор когда ВТ_19.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 19, 1) конец +
Выбор когда ВТ_20.Цифра есть null тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 20, 1) конец
,16) КАК ЧислоСтрокой
Поместить ВТ_ЧислоПриведенноеСтрокой
ИЗ ВТ КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_1 ПО (ВТ_1.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 1, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_2 ПО (ВТ_2.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 2, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_3 ПО (ВТ_3.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 3, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_4 ПО (ВТ_4.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 4, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_5 ПО (ВТ_5.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 5, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_6 ПО (ВТ_6.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 6, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_7 ПО (ВТ_7.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 7, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_8 ПО (ВТ_8.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 8, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_9 ПО (ВТ_9.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 9, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_10 ПО (ВТ_10.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 10, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_11 ПО (ВТ_11.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 11, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_12 ПО (ВТ_12.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 12, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_13 ПО (ВТ_13.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 13, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_14 ПО (ВТ_14.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 14, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_15 ПО (ВТ_15.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 15, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_16 ПО (ВТ_16.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 16, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_17 ПО (ВТ_17.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 17, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_18 ПО (ВТ_18.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 18, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_19 ПО (ВТ_19.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 19, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_20 ПО (ВТ_20.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 20, 1))
;
ВЫБРАТЬ
ВТ.ЧислоСтрокойОригинал как ЧислоСтрокойОригинал,
ПРАВ("000000000000000" +
Выбор когда ВТ_1.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 1, 1) конец +
Выбор когда ВТ_2.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 2, 1) конец +
Выбор когда ВТ_3.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 3, 1) конец +
Выбор когда ВТ_4.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 4, 1) конец +
Выбор когда ВТ_5.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 5, 1) конец +
Выбор когда ВТ_6.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 6, 1) конец +
Выбор когда ВТ_7.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 7, 1) конец +
Выбор когда ВТ_8.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 8, 1) конец +
Выбор когда ВТ_9.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 9, 1) конец +
Выбор когда ВТ_10.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 10, 1) конец +
Выбор когда ВТ_11.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 11, 1) конец +
Выбор когда ВТ_12.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 12, 1) конец +
Выбор когда ВТ_13.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 13, 1) конец +
Выбор когда ВТ_14.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 14, 1) конец +
Выбор когда ВТ_15.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 15, 1) конец +
Выбор когда ВТ_16.Цифра ="." тогда "" иначе ПОДСТРОКА(ВТ.ЧислоСтрокой, 16, 1) конец
,15) КАК ЧислоСтрокой,
выбор когда ВТ_1.Цифра="." Тогда 10000000000000000
когда ВТ_2.Цифра="." Тогда 1000000000000000
когда ВТ_3.Цифра="." Тогда 100000000000000
когда ВТ_4.Цифра="." Тогда 10000000000000
когда ВТ_5.Цифра="." Тогда 1000000000000
когда ВТ_6.Цифра="." Тогда 100000000000
когда ВТ_7.Цифра="." Тогда 10000000000
когда ВТ_8.Цифра="." Тогда 1000000000
когда ВТ_9.Цифра="." Тогда 100000000
когда ВТ_10.Цифра="." Тогда 10000000
когда ВТ_11.Цифра="." Тогда 100000
когда ВТ_12.Цифра="." Тогда 10000
когда ВТ_13.Цифра="." Тогда 1000
когда ВТ_14.Цифра="." Тогда 100
когда ВТ_15.Цифра="." Тогда 10
иначе 1 конец как МножительСдвигаРазрядов
Поместить ВТ_ЧислоПриведенноеСтрокойБезТочки
ИЗ ВТ_ЧислоПриведенноеСтрокой КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_1 ПО (ВТ_1.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 1, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_2 ПО (ВТ_2.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 2, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_3 ПО (ВТ_3.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 3, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_4 ПО (ВТ_4.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 4, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_5 ПО (ВТ_5.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 5, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_6 ПО (ВТ_6.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 6, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_7 ПО (ВТ_7.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 7, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_8 ПО (ВТ_8.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 8, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_9 ПО (ВТ_9.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 9, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_10 ПО (ВТ_10.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 10, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_11 ПО (ВТ_11.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 11, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_12 ПО (ВТ_12.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 12, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_13 ПО (ВТ_13.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 13, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_14 ПО (ВТ_14.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 14, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_15 ПО (ВТ_15.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 15, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_16 ПО (ВТ_16.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 16, 1))
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ.ЧислоСтрокойОригинал как ЧислоСтрокойОригинал,
(
выразить(ВТ_1.Цифра как число(15,3))*100000000000000 +
выразить(ВТ_2.Цифра как число(15,3))*10000000000000 +
выразить(ВТ_3.Цифра как число(15,3))*1000000000000 +
выразить(ВТ_4.Цифра как число(15,3))*100000000000 +
выразить(ВТ_5.Цифра как число(15,3))*10000000000 +
выразить(ВТ_6.Цифра как число(15,3))*1000000000 +
выразить(ВТ_7.Цифра как число(15,3))*100000000 +
выразить(ВТ_8.Цифра как число(15,3))*10000000 +
выразить(ВТ_9.Цифра как число(15,3))*1000000 +
выразить(ВТ_10.Цифра как число(15,3))*100000 +
выразить(ВТ_11.Цифра как число(15,3))*10000 +
выразить(ВТ_12.Цифра как число(15,3))*1000 +
выразить(ВТ_13.Цифра как число(15,3))*100 +
выразить(ВТ_14.Цифра как число(15,3))*10 +
выразить(ВТ_15.Цифра как число(15,3))
)/ВТ.МножительСдвигаРазрядов КАК ЧислоЧислом
ИЗ
ВТ_ЧислоПриведенноеСтрокойБезТочки КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_1 ПО (ВТ_1.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 1, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_2 ПО (ВТ_2.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 2, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_3 ПО (ВТ_3.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 3, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_4 ПО (ВТ_4.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 4, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_5 ПО (ВТ_5.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 5, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_6 ПО (ВТ_6.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 6, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_7 ПО (ВТ_7.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 7, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_8 ПО (ВТ_8.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 8, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_9 ПО (ВТ_9.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 9, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_10 ПО (ВТ_10.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 10, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_11 ПО (ВТ_11.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 11, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_12 ПО (ВТ_12.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 12, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_13 ПО (ВТ_13.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 13, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_14 ПО (ВТ_14.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 14, 1))
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Соответствие КАК ВТ_15 ПО (ВТ_15.Символ = ПОДСТРОКА(ВТ.ЧислоСтрокой, 15, 1))
Проверку исходной строки приходится выполнять дважды: сначала для избавления от мусорных символов (в том числе разделителей разрядов), потом для исключения символа разделителя дробной части. В итоге на выходе следующий результат:

Возможно применение на любой конфигурации на платформе не ниже 8.3.20.1549
Вступайте в нашу телеграмм-группу Инфостарт
