v8: Операции преобразования Число в Строку и обратно в запросах Ключевые слова: Число, Строка, SQL, Запрос, Подстрока, Преобразование
Стандартно преобразовать поле в строку из числа и в число из строки нельзя.
Но можно вот таким извратом:
Функция ТекстЗапросаИзЧислаВСтроку(пИмяПоля, пДлинаЦел, пДлинаДробь, пЛидирующийСимвол="")
лЗапрос=Новый Запрос("ВЫБРАТЬ ВЫРАЗИТЬ(0.5 КАК ЧИСЛО (15, 0)) КАК Проверка");
лВыборка=лЗапрос.Выполнить().Выбрать();
лВыборка.Следующий();
лЗапросОкругляетПоАрифметическимПравилам=лВыборка.Проверка=1;
лТекст="ВЫБОР КОГДА "+пИмяПоля+"<0 Тогда ""-"" ИНАЧЕ """" КОНЕЦ "+Символы.ПС;
лИмяПоляАбс=" ВЫБОР КОГДА "+пИмяПоля+"<0 ТОГДА -"+пИмяПоля+" ИНАЧЕ "+пИмяПоля+" КОНЕЦ ";
лПараметр=Pow(10, пДлинаЦел-1);
Для лИнд=1 По пДлинаЦел+пДлинаДробь цикл
лТекст=лТекст+?(лИнд=пДлинаЦел+1, "+"".""+", "+");
лТекст=лТекст+" ВЫБОР "+Символы.ПС+
?(лИнд<пДлинаЦел, " КОГДА "+лИмяПоляАбс+" < "+Формат(лПараметр, "ЧРД=.; ЧГ=")+" ТОГДА """+пЛидирующийСимвол+""" "+Символы.ПС, "");
Для лЦифра=0 По 9 Цикл
лТекст=лТекст+" КОГДА "+лИмяПоляАбс+"-"+Формат(лПараметр*10, "ЧРД=.; ЧГ=")+"*ВЫРАЗИТЬ(("+лИмяПоляАбс+?(лЗапросОкругляетПоАрифметическимПравилам, "-"+Формат(лПараметр*5, "ЧРД=.; ЧГ="), "")+")/"+Формат(лПараметр*10, "ЧРД=.; ЧГ=")+" КАК ЧИСЛО(15, 0))"+" >= "+Формат((9-лЦифра)*лПараметр, "ЧН=0; ЧРД=.; ЧГ=")+" ТОГДА """+Формат(9-лЦифра, "ЧН=0; ЧРД=.; ЧГ=")+""" "+Символы.ПС;
КонецЦикла;
лТекст=лТекст+" ИНАЧЕ ""0"""+Символы.ПС+" Конец "+Символы.ПС;
лПараметр=лПараметр/10;
КонецЦикла;
Сообщить(лТекст);
Возврат лТекст;
КонецФункции
Функция ТекстЗапросаИзСтрокиВЧисло(пИмяПоля, пДлинаСтроки, пСимволРазделителя=".")
лТекст="ВЫБОР ";
Для лДлинаЦелойЧасти=0 По пДлинаСтроки Цикл
Если лДлинаЦелойЧасти=пДлинаСтроки Тогда
лТекст=лТекст+"ИНАЧЕ"+Символы.ПС;
Иначе
лТекст=лТекст+"КОГДА ПОДСТРОКА("+пИмяПоля+", "+(лДлинаЦелойЧасти+1)+", 1)="""+пСимволРазделителя+""" ИЛИ ПОДСТРОКА("+пИмяПоля+", "+(лДлинаЦелойЧасти+1)+", 1)="""" ТОГДА "+Символы.ПС;
КонецЕсли;
Если лДлинаЦелойЧасти=0 Тогда лТекст=лТекст+" 0"+Символы.ПС; КонецЕсли;
Для лИнд=1 По лДлинаЦелойЧасти Цикл
лТекст=лТекст+" ВЫБОР "+Символы.ПС;
Для лЦифра=0 По 9 Цикл
лТекст=лТекст+" КОГДА ПОДСТРОКА("+пИмяПоля+", "+лИнд+", 1)="""+лЦифра+""" ТОГДА "+лЦифра+Символы.ПС;
КонецЦикла;
лТекст=лТекст+" ИНАЧЕ 0 КОНЕЦ"+?(лИнд=лДлинаЦелойЧасти, "", "*"+Формат(Pow(10, лДлинаЦелойЧасти-лИнд), "ЧРД=.; ЧГ=0")+"+")+Символы.ПС;
КонецЦикла;
Для лИнд=лДлинаЦелойЧасти+2 По пДлинаСтроки Цикл
лТекст=лТекст+"+ ВЫБОР";
Для лЦифра=0 По 9 Цикл
лТекст=лТекст+" КОГДА ПОДСТРОКА("+пИмяПоля+", "+лИнд+", 1)="""+лЦифра+""" ТОГДА "+лЦифра+Символы.ПС;
КонецЦикла;
лТекст=лТекст+" ИНАЧЕ 0 КОНЕЦ"+?(лИнд=лДлинаЦелойЧасти, "", "/"+Формат(Pow(10, лИнд-лДлинаЦелойЧасти-1), "ЧРД=.; ЧГ=0"))+Символы.ПС;
КонецЦикла;
КонецЦикла;
лТекст=лТекст+"КОНЕЦ";
Возврат лТекст;
КонецФункции
Для проверки:
Процедура КнопкаВыполнить1(Кнопка)
лЗапрос=Новый Запрос;
лЗапрос.Текст="ВЫБРАТЬ ""Полученная строка : ""+"+ТекстЗапросаИзЧислаВСтроку(12, 2, 0)+" КАК Строка";
лТзЗапроса=лЗапрос.Выполнить().Выгрузить();
лТзЗапроса.ВыбратьСтроку();
КонецПроцедуры
Процедура КнопкаВыполнить2(Кнопка)
лЗапрос=Новый Запрос;
лЗапрос.УстановитьПараметр("а", "1333.3");
лЗапрос.Текст="ВЫБРАТЬ "+ТекстЗапросаИзСтрокиВЧисло("&а", 6)+" КАК Число";
Сообщить(лЗапрос.Текст);
лТзЗапроса=лЗапрос.Выполнить().Выгрузить();
лТзЗапроса.ВыбратьСтроку();
КонецПроцедуры
За текст функции ТекстЗапросаИзЧислаВСтроку спасибо NewNick |