Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: CONVERT в WHERE строка-дата

v7: CONVERT в WHERE строка-дата
Я
   serpentt
 
04.01.19 - 15:52
Здравствуйте, подскажите, как прописать условие в запросе

есть в таблице Реквизит СТРОКА
2019-01-01
2019-01-01
2019-10-05
2019-01-01
2018-04-21

в SELECT я его получаю

CONVERT(DateTime,$СпрПартии.ДатаСрокГодности1,102)

если добавить в условие
NtrL=ТекущаяДата()

WHERE
   CONVERT(DateTime,$СпрПартии.ДатаСрокГодности1,102) <= :NtrL

И под условие выборки не попадает ничего, получаю ошибку

State 22007, native 242, message [Microsoft][ODBC SQL Server Driver][SQL Server]The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

как в Запросе учесть что записей подходящих под данное условие нет?
 
 
   zmaximka
 
1 - 04.01.19 - 16:02
Ntrl преобразуй в строку Формат(ГГГГ-ММ-ДД)
   Sserj
 
2 - 04.01.19 - 16:10
МетаДата = СоздатьОбъект("MetaDataWork");
датаСтрокой = МетаДата.ПолучитьСтрИзДаты(ТекущаяДата());

"
..
WHERE
    REPLACE ($СпрПартии.ДатаСрокГодности1,'-','') < " + датаСтрокой
   Sserj
 
3 - 04.01.19 - 16:11
+(2)
Точнее так:
< '" + датаСтрокой + "'"
   serpentt
 
4 - 04.01.19 - 16:12
(2) Спасибо пробую
   Sserj
 
5 - 04.01.19 - 16:13
Ну и еще учесть сколько там пробелов.
Если SQL 2012 и выше то 
  RTRIM (REPLACE ($СпрПартии.ДатаСрокГодности1,'-',''))

Если ниже то
  LTRIM(RTRIM(REPLACE..))
   Sserj
 
6 - 04.01.19 - 16:16
Нельзя писать на форум в праздники :)

Это с SQL 2017 появилась TRIM(), обрезающая слева и с права все.
Все что раньше только 
LTRIM(RTRIM())
   serpentt
 
7 - 04.01.19 - 16:22
(6)
Нет это не работает
повторюсь, даны данные с Датой в виде строки "2018-04-21"

если делать выборку без условия даты, то все получаем.
Если делать выборку с условием проверки Даты(которая строка) и в выборке есть данные... все ОК

НО как только задаеш дату в условии, до которой нет данных, получаем ошибку.
   serpentt
 
8 - 04.01.19 - 16:23
2018-04-01
2018-04-02
2018-04-03
2018-04-04
2018-04-05


Если условие Дата < 2018-04-04 ОК
если условие Дата < 2018-04-01 ERR
   Sserj
 
9 - 04.01.19 - 16:25
(7) Так тогда весь запрос нужен. Если нет данных и ошибка то видимо это у тебя подзапрос который должен возвращать какое то скалярное выражение, а когда ничего нет то что-то падает.
   serpentt
 
10 - 04.01.19 - 16:33
(9)
SELECT
|   СпрПартии.ID as [ВСД_Партия $Справочник.ВСД_Партия],
|    $СпрПартии.ДатаСрокГодности1,
|    CONVERT(DateTime,$СпрПартии.ДатаСрокГодности1,102),
|    REPLACE ($СпрПартии.ДатаСрокГодности1,'-','')
|FROM     $Справочник.ВСД_Партия AS СпрПартии
|WHERE
|    REPLACE ($СпрПартии.ДатаСрокГодности1,'-','') < '"+датаСтрокой+"'
|    and (СпрПартии.IsMark = 0)
|    AND ($СпрПартии.Количество > 0 )
 
 Рекламное место пустует
   Sserj
 
11 - 04.01.19 - 17:32
(10) А мне кажется у тебя в справочнике есть записи с пустой ДатаСрокГодности1. Такие записи в любом случае будут меньше любой строки и в итоге у тебя вот сюда:
CONVERT(DateTime,$СпрПартии.ДатаСрокГодности1,102)
попадает пустая строка, соответснно ошибка.
Поэтому добавь еще в условие
and NOT (LTRIM(RTRIM($СпрПартии.ДатаСрокГодности1)) = '')
   serpentt
 
12 - 04.01.19 - 17:36
CONVERT(DateTime,$СпрПартии.ДатаСрокГодности1,102)

один его пробовал
С пустой датой нет

в итоге перевел на TOYSQL
С ним все работает


|SELECT
|    ВСД_Партия = [СпрПартии.Ссылка],
|    Продукция_Элемент = [СпрПартии.Продукция_Элемент],
|    ПолеСортировки = [СпрПартии."+ПолеСортировки+"],
|    Количество = [СпрПартии.Количество],
|    КоличествоМест = [СпрПартии.КоличествоМест]
|FROM
|    [Справочник.ВСД_Партия] СпрПартии WITH (NOLOCK)
|WHERE
|    "+ОтборПоЭлементам+"
|    AND [СпрПартии.Количество] > 0
|    AND [СпрПартии.ПометкаУдаления] = 0
|    AND [СпрПартии.Получатель_Площадка] = [@ВыбПлощадка]
|    AND [СпрПартии.Получатель_ХозСубъект] = [@ВыбХС]
|
|    AND (REPLACE (SUBSTRING([СпрПартии.ДатаСрокГодности1],1,10),'-','') < '"+датаСтрокой+"')
|    
|ORDER BY [СпрПартии."+ПолеСортировки+"] "+_ЗнакСортировки+"    
|";

Всеравно спасибо
   ADirks
 
13 - 09.01.19 - 09:42
(0) Надо почитать доку, Приложение А / Спецификация параметров.
д.б.

WHERE
   CONVERT(DateTime,$СпрПартии.ДатаСрокГодности1,102) <= :NtrL~~

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует