|
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~~ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |