Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Arithmetic overflow error


Автор: TheSheevA 6.6.2005, 19:56
Привет всем!

В таблице есть поле, в котором хранятся данные разного формата, в том числе и даты. Конкретный тип данных в поле определяется другим полем таблицы, типа

TYPE VALUE
int 1234
date 01.01.05
text Hello, World!

Нужно запросом выбрать все записи с датами до сегодняшней. Такой запрос:

SELECT *
FROM table
WHERE
TYPE='date'
AND
CONVERT("DATETIME",VALUE)<GetDate()

выдает сабж. Предположительно, условие применяется ко всем записям (а не только к тем, у которых TYPE='data').
Никто не знает, как с этим бороться (или как написать правильно?)

Используется MS SQL Server

Автор: Satana 6.6.2005, 20:12
TheSheevA ну интересно а что все поля в таблице чтоли с датой? почему бы тебе не перечислить те поля которые тебя интересуют и собственно именно это поле и конвертить? smile

Автор: TheSheevA 6.6.2005, 20:27
Цитата
почему бы тебе не перечислить те поля которые тебя интересуют и собственно именно это поле и конвертить?

Так оно и предполагается, но MSSQL не зочет сразу фыильтровать записи, не проходящие условие TYPE='date' То есть конвертит все записи.
BTW в Access такой же запрос работает нормально...

Автор: boevik 6.6.2005, 20:33
Сделай join по ключу и условием в join поставить TYPE='date'.
Код

SELECT * 
FROM table t1 INNER JOIN table t2
ON t1.id = t2.id AND TYPE='date'
WHERE CONVERT("DATETIME",VALUE)<GetDate()

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)