Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 проблема с конвертацией данных  [new]
Wepr
Member

Откуда:
Сообщений: 42
Народ туплю уже два часа , мозг взорван. Вобщем есть хранимая процедура
ALTER PROCEDURE [dbo].[GetAbsentUserByID]
	-- Add the parameters for the stored procedure here
	@objectID int,
	@startDate date,
	@endDate date
AS
BEGIN
 
 
  select objects.*, parameters.value as 'С',p2.value as 'По' ,CONVERT(date,parameters.value ,104 ) ,CONVERT(date,@endDate,104)
  from objects 
  inner join links on objects.object_id = links.object_id and links.source_object_id=@objectID
  inner join parameters on objects.object_id = parameters.object_id and parameters.name='С' 
  inner join parameters p2 on objects.object_id = p2.object_id and  p2.name='По' and CONVERT(CHAR(16),p2.s,120) = CONVERT(CHAR(16),parameters.s,120)
 where CONVERT(date,parameters.value ,104 ) <CONVERT(date,@endDate,104)
  and  CONVERT(date,p2.value,104) >=CONVERT(date,@startDate,104)


если убрать условие where то запрос отрабатывает даты у последних колонок конвертируются нормально , но если включить условие то вылетает ошибка Conversion failed when converting date and/or time from character string.
Как только я не извращался и пытался передать вместо даты в процедуру дату в формате строки и затем конвертить ,один фиг ошибка если условие убрать то конвертится все нормально

Сообщение было отредактировано: 17 ноя 12, 00:31
16 ноя 12, 14:49    [13484326]     Ответить | Цитировать Сообщить модератору
 Re: проблема с конвертацией данных  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
если так говорит:
"Conversion failed when converting date and/or time from character string."

значит у Вас в таблице p2.value или parameters.value не могут быть приведены к дате

варианты решения, известные мне
1. хранить дату как дату а не как что-то иное
2. сначала выбрать данные по условию ISDATE() = 1, а уж потом обернуть сверху Вашим условием с конвертацией
16 ноя 12, 15:00    [13484409]     Ответить | Цитировать Сообщить модератору
 Re: проблема с конвертацией данных  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Wepr,

CONVERT(date,parameters.value ,104 )

может изменить на
CONVERT(date,[parameters.value],104 )
16 ноя 12, 15:06    [13484457]     Ответить | Цитировать Сообщить модератору
 Re: проблема с конвертацией данных  [new]
Wepr
Member

Откуда:
Сообщений: 42
HandKot
если так говорит:
"Conversion failed when converting date and/or time from character string."

значит у Вас в таблице p2.value или parameters.value не могут быть приведены к дате

варианты решения, известные мне
1. хранить дату как дату а не как что-то иное
2. сначала выбрать данные по условию ISDATE() = 1, а уж потом обернуть сверху Вашим условием с конвертацией


parameters.value nvarchar, это поле по задумке автора универсальное поле , без условия прекрасно конвертятся но если начинать сравнивать сконвертированые данные и входные вылетает эта ошибка
16 ноя 12, 15:16    [13484548]     Ответить | Цитировать Сообщить модератору
 Re: проблема с конвертацией данных  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
А зачем @startDate и @endDate приводить к типу DATE, если они и так DATE?
Что содержится в parameters.value и какого типа это поле?
К примеру, если это строка, но сначала там задан месяц, а число потом, то 104-й стиль применяется неправильно.
Как только попадается "месяц" больше двенадцати, сервер грязно ругается, и его можно понять.
16 ноя 12, 15:18    [13484560]     Ответить | Цитировать Сообщить модератору
 Re: проблема с конвертацией данных  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Wepr
parameters.value nvarchar, это поле по задумке автора универсальное поле , без условия прекрасно конвертятся но если начинать сравнивать сконвертированые данные и входные вылетает эта ошибка
Просто без WHERE после JOINов неправильных с точки зрения номера месяца строк не остаётся,
и они без ссообщения об ошибке конвертируются в SELECT.
При этом, скорее всего, они реально неправильные.

Как только появляется WHERE, план меняется, сервер начинает с CONVERTов в WHERE,
натыкается на неправильный номер месяца, который Вы почему-то считаете числом, и - всё!
16 ноя 12, 15:22    [13484592]     Ответить | Цитировать Сообщить модератору
 Re: проблема с конвертацией данных  [new]
Wepr
Member

Откуда:
Сообщений: 42
iap
А зачем @startDate и @endDate приводить к типу DATE, если они и так DATE?
Что содержится в parameters.value и какого типа это поле?


1) Это уже от безысходности привел DATE думал может поможет, а параметр parameters.value ='21.10.2012' проблема возникает только при сравнение конвертированого value с переданой датой

quot iap]
Wepr
parameters.value nvarchar, это поле по задумке автора универсальное поле , без условия прекрасно конвертятся но если начинать сравнивать сконвертированые данные и входные вылетает эта ошибка
Просто без WHERE после JOINов неправильных с точки зрения номера месяца строк не остаётся,
и они без ссообщения об ошибке конвертируются в SELECT.
При этом, скорее всего, они реально неправильные.

Как только появляется WHERE, план меняется, сервер начинает с CONVERTов в WHERE,
натыкается на неправильный номер месяца, который Вы почему-то считаете числом, и - всё![/quot]

По запросу без условия возвращается только одна строка , соответственно возникает вопрос , что отрабабатывает раньше условие в join или where если в where тогда в него действительно может попасть не дата
16 ноя 12, 15:42    [13484823]     Ответить | Цитировать Сообщить модератору
 Re: проблема с конвертацией данных  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Wepr
iap
А зачем @startDate и @endDate приводить к типу DATE, если они и так DATE?
Что содержится в parameters.value и какого типа это поле?
1) Это уже от безысходности привел DATE думал может поможет, а параметр parameters.value ='21.10.2012' проблема возникает только при сравнение конвертированого value с переданой датой

Wepr
parameters.value nvarchar, это поле по задумке автора универсальное поле , без условия прекрасно конвертятся но если начинать сравнивать сконвертированые данные и входные вылетает эта ошибка
iap
Просто без WHERE после JOINов неправильных с точки зрения номера месяца строк не остаётся,
и они без ссообщения об ошибке конвертируются в SELECT.
При этом, скорее всего, они реально неправильные.

Как только появляется WHERE, план меняется, сервер начинает с CONVERTов в WHERE,
натыкается на неправильный номер месяца, который Вы почему-то считаете числом, и - всё!
По запросу без условия возвращается только одна строка , соответственно возникает вопрос , что отрабабатывает раньше условие в join или where если в where тогда в него действительно может попасть не дата
План выбирает сервер. Порядок выполнения разных частей запроса может быть разным.
В зависимости от многих факторов.
16 ноя 12, 15:58    [13484992]     Ответить | Цитировать Сообщить модератору
 Re: проблема с конвертацией данных  [new]
Wepr
Member

Откуда:
Сообщений: 42
Все всем спасибо , разобрался , мне всегда казалось что условие в join отработают раньше where , сейчас поставил проверку на дату и все заработало , вернулась одна строка
16 ноя 12, 16:09    [13485114]     Ответить | Цитировать Сообщить модератору
 Re: проблема с конвертацией данных  [new]
dalex1973
Member

Откуда: Польша
Сообщений: 287
Добавьте вычисляемое поле и туда загоняйте дату. Потом там ищите + индекс.
Такая ситуация как у Вас - это бомба замедленного действия, которая рано или поздно опять взорвётся.
Сам борюсь с вытягиванием инта из sql_variant (цепочки функций и предтавлений) - такие финты ушами приходится делать что "ни в сказке сказать..."
16 ноя 12, 18:10    [13486063]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить