| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > (MS SQL) CHAR+INT=DATETIME |
| Автор: Liska 31.10.2004, 14:14 |
| Привет помогите, плиз.... Дан некоторый фрагмент SQL-кода: DECLARE @a CHAR(12) DECLARE @b DATETIME DECLARE @c INT SET @a=’12.2.04’ SET @c=6 Какой правильный оператор для вычисления новой даты: SET @b=@a+@c SET @b=@a+CAST(@c AS DATETIME) SET @b=CAST(@a AS DATETIME) +@c SET @b=CAST((CAST(@a AS INT)+@c) AS DATETIME) Как вообще разобраться с датой и временем? Если к переменной типа DATETIME прибавить переменную типа INT, то он ее куда прибавит, к числу, к месяцу или к году? или вообще надо конвертировать все в дату, а потом прибавлять?? Разьясните, плиз!!! |
| Автор: boevik 31.10.2004, 15:57 |
| Liska, лучше использовать DATEADD. Или это вопрос из теста и надо выбрать ответ? Если запустить этот примерчик, то второй и третий вариант дают ответ '8 Dec 2004'. Первый и четвертый не работают. |
| Автор: Lunatikus 5.9.2007, 10:37 | ||
Привет.А как прибавить к дате месяц с помощью запроса?
прибавляет день. база MS SQL 2000. |
| Автор: ТоляМБА 5.9.2007, 10:44 | ||
|
| Автор: Lunatikus 5.9.2007, 11:05 | ||||
угу,работает.Но только если сравнивать ,Как
а вот если я захочу сделать
он покажет мне большую фигу в виде синтаксической ошибки. А зачем мне нужен IN? Вот простенькая задачка: в таблице одно поле data-даты.Другое интовое num-допустим,показывает число месяцев после указанной даты. ---01.01.2007------1--- ---06.02.2007------2--- так вот как вывести такую таблицу: ---01.01.2007--- ---06.02.2007--- ---06.03.2007--- как видно,нужно "сделать" новые даты на основе кол-ва месяцев.Если оно 1,то дата единственная. |
| Автор: Lunatikus 5.9.2007, 11:23 | ||
дошел до того что надо делать так:
таким образом,елси число месяцев-1,то будет выполняться условие только на одну дату(второе условие будет равно первому) Если число-2.То тоже все нормально.Берется первая дата,а второе условие берет дату на месяц позже ,Как и задумано.А вот как сделать при num>2?Есть какие-нибудь мысли? эх...было бы здорово,если бы можно было добавлять в запрос условные переходы...тогда все решалось бы легко |
| Автор: Lunatikus 6.9.2007, 14:02 | ||
в общем,решил проблему,ограничив число месячев num до 12. в итоге сделал двенадцать идентичных улсовий:
|
| Автор: Lunatikus 7.9.2007, 09:35 | ||
| схожая прабла,потому не стал новую тему делать. Пытаюсь перенести данные из одной таблицы в другую.В таблице,куда переношу данные поля data(datetime) и por(float).В таблице-источнике эти поля варчаровые.Подскажите,как в запросе сделать конверт правильно?То,Что у меня-не работает-выдает ошибку конвертации:
|
| Автор: ТоляМБА 7.9.2007, 09:55 |
| CAST, CONVERT - читаем синтаксис На какое поле ругается то? И текст запроса и значения пары полей - в студию! Может у тебя в данных есть пустые или Null значения? |
| Автор: Lunatikus 7.9.2007, 10:00 | ||
дату переводит конвертом,а вот с флотом праблы.ни каст ни конверт не помогает:
ругается что не может привести варчар к флоту |
| Автор: ТоляМБА 7.9.2007, 10:17 |
| Хм... на этой тачке щаз нет MS-SQL, но ты в BOL (F1) глянь хэлп по каст или в конверт - точно помню в одном из них была таблица возможности перевода из одного типа в другой! |
| Автор: Lunatikus 7.9.2007, 10:33 |
| я нашел,в чем прабла.Он выдает ошибку,Как только доходит до ненулевого значения поля варчар por.И видит 0,211423325535.Его смущает запятая.Потому что елси поставить точку в варчаровской строке,то переводит спокойно.Вопрос:как везде,где стоит запятая в этом поле поменять на точку?вручную зело долго |
| Автор: kobra 11.9.2007, 13:03 | ||
|
| Автор: Lunatikus 11.9.2007, 13:16 |
| гениально!!!! |