|   |   | 
| 
 | v7: CONVERT в WHERE строка-дата | ☑ | ||
|---|---|---|---|---|
| 0
    
        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. как в Запросе учесть что записей подходящих под данное условие нет? | |||
| 1
    
        zmaximka 04.01.19✎ 16:02 | 
        Ntrl преобразуй в строку Формат(ГГГГ-ММ-ДД)     | |||
| 2
    
        Sserj 04.01.19✎ 16:10 | 
        МетаДата = СоздатьОбъект("MetaDataWork");
 датаСтрокой = МетаДата.ПолучитьСтрИзДаты(ТекущаяДата()); " .. WHERE REPLACE ($СпрПартии.ДатаСрокГодности1,'-','') < " + датаСтрокой | |||
| 3
    
        Sserj 04.01.19✎ 16:11 | 
        +(2)
 Точнее так: < '" + датаСтрокой + "'" | |||
| 4
    
        serpentt 04.01.19✎ 16:12 | 
        (2) Спасибо пробую     | |||
| 5
    
        Sserj 04.01.19✎ 16:13 | 
        Ну и еще учесть сколько там пробелов.
 Если SQL 2012 и выше то RTRIM (REPLACE ($СпрПартии.ДатаСрокГодности1,'-','')) Если ниже то LTRIM(RTRIM(REPLACE..)) | |||
| 6
    
        Sserj 04.01.19✎ 16:16 | 
        Нельзя писать на форум в праздники :)
 Это с SQL 2017 появилась TRIM(), обрезающая слева и с права все. Все что раньше только LTRIM(RTRIM()) | |||
| 7
    
        serpentt 04.01.19✎ 16:22 | 
        (6)
 Нет это не работает повторюсь, даны данные с Датой в виде строки "2018-04-21" если делать выборку без условия даты, то все получаем. Если делать выборку с условием проверки Даты(которая строка) и в выборке есть данные... все ОК НО как только задаеш дату в условии, до которой нет данных, получаем ошибку. | |||
| 8
    
        serpentt 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 | |||
| 9
    
        Sserj 04.01.19✎ 16:25 | 
        (7) Так тогда весь запрос нужен. Если нет данных и ошибка то видимо это у тебя подзапрос который должен возвращать какое то скалярное выражение, а когда ничего нет то что-то падает.     | |||
| 10
    
        serpentt 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 ) | |||
| 11
    
        Sserj 04.01.19✎ 17:32 | 
        (10) А мне кажется у тебя в справочнике есть записи с пустой ДатаСрокГодности1. Такие записи в любом случае будут меньше любой строки и в итоге у тебя вот сюда:
 CONVERT(DateTime,$СпрПартии.ДатаСрокГодности1,102) попадает пустая строка, соответснно ошибка. Поэтому добавь еще в условие and NOT (LTRIM(RTRIM($СпрПартии.ДатаСрокГодности1)) = '') | |||
| 12
    
        serpentt 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 [СпрПартии."+ПолеСортировки+"] "+_ЗнакСортировки+" |"; Всеравно спасибо | |||
| 13
    
        ADirks 09.01.19✎ 09:42 | 
        (0) Надо почитать доку, Приложение А / Спецификация параметров.
 д.б. WHERE CONVERT(DateTime,$СпрПартии.ДатаСрокГодности1,102) <= :NtrL~~ | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |