powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ткните, где почитать про параметры в предложении where и индексы
21 сообщений из 21, страница 1 из 1
ткните, где почитать про параметры в предложении where и индексы
    #39768326
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 declare @endpoint as date;
 set @endpoint='20190101';



-- ... и тут кусок запроса

 and VsaInform.DPTBG>= @endpoint --- этот падает с ошибкой 

-- Сообщение 241, уровень 16, состояние 1, строка 4
-- Conversion failed when converting date and/or time from character string.

-- да, есть записи с '00000000'

  --and VsaInform.DPTBG>= '20190101' 

-- однако с таким условием не падает



есть ощущение, что когда сервер пытается применить индексы - такая ситуация и проявляется. Что годного почитать на эту тему?
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768329
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приводите типы явно, если неявного приведения не замечаете.

and VsaInform.DPTBG>= cast(@endpoint as varchar)
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768332
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какого типа поле DPTBG ?

Почему переменная не DateTime ?
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768333
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewicz
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 declare @endpoint as date;
 set @endpoint='20190101';



-- ... и тут кусок запроса

 and VsaInform.DPTBG>= @endpoint --- этот падает с ошибкой 

-- Сообщение 241, уровень 16, состояние 1, строка 4
-- Conversion failed when converting date and/or time from character string.

-- да, есть записи с '00000000'

  --and VsaInform.DPTBG>= '20190101' 

-- однако с таким условием не падает




есть ощущение, что когда сервер пытается применить индексы - такая ситуация и проявляется. Что годного почитать на эту тему?



Это не про индексы, это про неявное преобразование типов
https://docs.microsoft.com/ru-ru/sql/t-sql/data-types/data-type-precedence-transact-sql?view=sql-server-2017
https://docs.microsoft.com/ru-ru/sql/t-sql/data-types/data-type-conversion-database-engine?view=sql-server-2017
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768334
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее, вот так: convert( varchar(8), @endpoint, 112 )
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768336
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPTBG его преобразовывайте в date/datetime
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768338
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One DPTBG его преобразовывайте в date/datetime

Нельзя, ибо


waszkiewicz-- да, есть записи с '00000000'
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768345
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare @t table (d varchar(8) null)
insert into @t(d)
values('20190201'), ('00000000'), (''), (null), ('20181231'), ('12234'), ('dfasdgsa')


select 
	CONVERT(datetime,
	case 
		when ISNULL(t.d, '') = '' OR t.d = '00000000'  OR LEN(t.d) < 8 OR ISNUMERIC(t.d) = 0 then '19000101'
		else t.d 
	END, 112) as [date]
from @t t



допиливайте дальше
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768355
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,
А почему нельзя ?
Код: sql
1.
SELECT d, COALESCE(TRY_CONVERT(date, d),'19010101') FROM @t
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768358
zby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

а еще можно
Код: sql
1.
ISDATE()

использовать
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768359
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
declare @endpoint as char(8)


и всего делов
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768361
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewicz
Код: sql
1.
declare @endpoint as char(8)



и всего делов

ну так и что даст это сравнение?
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768362
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monsterKonst_One,
А почему нельзя ?
Код: sql
1.
SELECT d, COALESCE(TRY_CONVERT(date, d),'19010101') FROM @t



можно всё, ТС не обозначил версию сервера
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768365
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,
DPTBG - varchar(8)
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768366
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,
Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64) Oct 20 2015 15:36:27 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768367
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

элементарно: падает, если сравнивать кривую строку с датой, не падает, если сравнивать кривую строку со строкой.

Сравниваете ежа с цаплей - падает, сравниваете ежа с ежом - не падает.
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768370
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewiczKonst_One,
DPTBG - varchar(8)

Код: sql
1.
2.
3.
4.
 declare @endpoint as char(8) = '20190101';
 declare @DPTBG varchar(8) = 'ZZZZZ';

select CASE WHEN @DPTBG >= @endpoint THEN '>=' ELSE '<' END as [case]



???
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768374
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

есть еще и бизнес-логика. не будет там невалидных дат ('00000000' - просто эквивалент NULL)
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768548
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
waszkiewicz,

значит используйте nullif(). На сервере, знаете ли, другая логика, отличная от фантастической.
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768549
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё - не ешьте на ночь сырых помидоров, используйте явное преобразование типов.
...
Рейтинг: 0 / 0
ткните, где почитать про параметры в предложении where и индексы
    #39768631
waszkiewicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовИ ещё - не ешьте на ночь сырых помидоров, используйте явное преобразование типов.
сарказм от Остапа Ибрагимовича "здесь неуместен"
моя ошибка была лишь в том, что объявил @endpoint as date. DPTBG живет как varchar(8). Клиент туда в принципе не даст записать что-то отличное от, например '20180101' или '00000000' если дата не выбрана. Это инфа 100500%
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ткните, где почитать про параметры в предложении where и индексы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]