Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Преобразование типов (число прочтений - 4621 )
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Преобразование типов
22. Августа 2014 :: 05:58
Печать  
Как преобразовывать правильно типы?

Появилась необходимость найти в справочнике по коду (varchar(10))
элементы. Искать надо по числу - код другого справочника
Пробовал CAST CONVERT не помогает или я что то не правильно делаю.   Озадачен

SEL Спр.ID
FROM $Спр AS Спр
WHERE Спр.CODE = (SEL Спр1.CODE FROM спр1 WHERE Спр1.CODE = 10)

С преобразованием:

SEL Спр.ID
FROM $Спр AS Спр
WHERE Спр.CODE = (SEL CAST(Спр1.CODE AS varchar) FROM спр1 WHERE Спр1.CODE = 10)

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Преобразование типов
Ответ #1 - 22. Августа 2014 :: 08:41
Печать  
надо внешние типы приводить к типам 1с таблиц а не наоборот.
Ваш пример не очень понятен.
Если после равно стоит select то если select будет отбирать более
одного значения то такой запрос будет "падать" по ошибке
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Преобразование типов
Ответ #2 - 22. Августа 2014 :: 08:46
Печать  
Z1 писал(а) 22. Августа 2014 :: 08:41:
надо внешние типы приводить к типам 1с таблиц а не наоборот.
Ваш пример не очень понятен.
Если после равно стоит select то если select будет отбирать более
одного значения то такой запрос будет "падать" по ошибке


Ну мне надо конкретно преобразовать в sql int в varchar(10).
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Преобразование типов
Ответ #3 - 22. Августа 2014 :: 08:53
Печать  
опишите как можно подробней вашу задачу


также не понятно что такое Спр1  в коде
SEL Спр1.CODE FROM спр1
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Преобразование типов
Ответ #4 - 22. Августа 2014 :: 09:10
Печать  
SELECT      (SELECT TOP 1 Отклонения.ID 
FROM $Справочник.ТипыОтклонений AS Отклонения
WHERE Отклонения.CODE = CONVERT(varchar(10), Календарь.DAYLEN, 126))
FROM      CL AS Календарь
WHERE      Календарь.ID      = dbo.Convert36To10(RIGHT(LTRIM(RTRIM($Графики.ОсновныеЧасы)), 6))
AND            Календарь.DATE      = '201408" + СтрокаСНулями(Н, 2) + "') AS [ДБ" + СтрокаСНулями(Н, 2) + " $Справочник.ТипыОтклонений]

Есть справочник "Типы отклонений" в нем записи
КОД Наименование
8     8 раб. часов
12   12 раб. часоы
4     4 раб. часов
ВР   Выходной
и так далее

Из календаря я получаю значения дня (Календарь.DAYLEN), к примеру значение 8.
И хочу найти в справочнике "Типы отклонений" найти по коду это значение (код уникальный), но как я бы не
преобразовывал значение Календарь.DAYLEN ничего не могу получить. Если явно задам Отклонения.CODE = '8' все нормально работает.
« Последняя редакция: 22. Августа 2014 :: 11:05 - barbitura »  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Преобразование типов
Ответ #5 - 22. Августа 2014 :: 09:36
Печать  
Код в справочнике когда в 1с установлено числовой
все равно хранит в строке прижатой вправо
так что вполне можно использовать  ltrim  и rtrim
это конечно неоптимально по индексу но у Вас итак в тексте запроса идет полный скан таблицы.
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Преобразование типов
Ответ #6 - 22. Августа 2014 :: 11:07
Печать  
Z1 писал(а) 22. Августа 2014 :: 09:36:
Код в справочнике когда в 1с установлено числовой
все равно хранит в строке прижатой вправо
так что вполне можно использовать  ltrim  и rtrim
это конечно неоптимально по индексу но у Вас итак в тексте запроса идет полный скан таблицы.


нет не помогает. вот если я напишу LEFT(Х, 1) то помогает но это не правильно так как и может быть 2 цифры в дне календаря.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Преобразование типов
Ответ #7 - 22. Августа 2014 :: 19:02
Печать  
LEFT(X+'     ',5)
  
Наверх
ICQ  
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Преобразование типов
Ответ #8 - 25. Августа 2014 :: 05:20
Печать  
Salimbek писал(а) 22. Августа 2014 :: 19:02:
LEFT(X+'     ',5)

Спасибо. но не помогло.
Уже и не знаю что и делать с эти преобразованием.
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Преобразование типов
Ответ #9 - 25. Августа 2014 :: 06:14
Печать  
Самое интересное что для времени  7.5 из календаря работает а для 7 не работает

WHERE LTRIM(RTRIM(Отклонения.CODE)) = LTRIM(RTRIM(Календарь.DAYLEN))
Если в календаре 7.5 часов то все нормально
а если 7 часов то не работает
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Преобразование типов
Ответ #10 - 25. Августа 2014 :: 06:22
Печать  
Написал сообщение и сам понял что за ошибка.
в справочнике код 7
в календаре после преобразованию 7.00
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Преобразование типов
Ответ #11 - 25. Августа 2014 :: 07:33
Печать  
А может, не парить мозг ни себе ни серверу, а сделать в справочнике нормальное числовое поле с временем?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Преобразование типов
Ответ #12 - 25. Августа 2014 :: 08:24
Печать  
Код со временем, это как ?
Улыбка
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Преобразование типов
Ответ #13 - 25. Августа 2014 :: 13:20
Печать  
ну я понимаю что код в справочнике сделать не 7 а 7.00
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Преобразование типов
Ответ #14 - 26. Августа 2014 :: 11:45
Печать  
Замучался уже.
Как удалить не нужные нули в конце числа?

есть числа
8.00  -> 8 (точка тоже удаляется)
8.30 -> 8.3
8.50 -> 8.5
8.66 -> 8.66
5.55 -> 5.55
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать