Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> (MS SQL) CHAR+INT=DATETIME, как правильно вычислить новую дату? 
:(
    Опции темы
Liska
Дата 31.10.2004, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 31.10.2004
Где: Новосибирск

Репутация: нет
Всего: нет



Привет
помогите, плиз....
Дан некоторый фрагмент 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, то он ее куда прибавит, к числу, к месяцу или к году? или вообще надо конвертировать все в дату, а потом прибавлять?? Разьясните, плиз!!! :qstn
PM MAIL ICQ   Вверх
boevik
Дата 31.10.2004, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Liska, лучше использовать DATEADD. Или это вопрос из теста и надо выбрать ответ?

Если запустить этот примерчик, то второй и третий вариант дают ответ '8 Dec 2004'.
Первый и четвертый не работают.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Lunatikus
Дата 5.9.2007, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



Привет.А как прибавить к дате месяц с помощью запроса?
Код

...WHERE data=data1+1

прибавляет день.

база MS SQL 2000.

Это сообщение отредактировал(а) Lunatikus - 5.9.2007, 10:46


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
ТоляМБА
Дата 5.9.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: нет
Всего: 252



Цитата
Для добавления дней к дате можно использовать «День года» («y»), «День» («d») или «День недели» («w»).
Функция DateAdd не возвращает недопустимые значения дат. В приведенном ниже примере показано добавление одного месяца к дате «31 января».
DateAdd("m", 1, "31-Jan-95")
В данном случае функция DateAdd вернет дату «28-Feb-95», а не «31-Feb-95». Если исходная дата — «31-Jan-96», то функция вернет «29-Feb-96», так как 1996 год является високосным.

PM   Вверх
Lunatikus
Дата 5.9.2007, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



угу,работает.Но только если сравнивать ,Как
Код

WHERE data=DATEAD(month,1,data1)

а вот если я захочу сделать
Код

WHERE data IN (DATEAD(month,1,data1),DATEAD(month,2,data1))

он покажет мне большую фигу в виде синтаксической ошибки.
А зачем мне нужен IN?
Вот простенькая задачка:
в таблице одно поле data-даты.Другое интовое num-допустим,показывает число месяцев после указанной даты.
---01.01.2007------1---
---06.02.2007------2---
так вот как вывести такую таблицу:
---01.01.2007---
---06.02.2007---
---06.03.2007---
как видно,нужно "сделать" новые даты на основе кол-ва месяцев.Если оно 1,то дата единственная.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Lunatikus
Дата 5.9.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



дошел до того что надо делать так:
Код

...WHERE data=data1 OR data=DATEADD(month,num-1,data1) 


таким образом,елси число месяцев-1,то будет выполняться условие только на одну дату(второе условие будет равно первому)
Если число-2.То тоже все нормально.Берется первая дата,а второе условие берет дату на месяц позже ,Как и задумано.А вот как сделать при num>2?Есть какие-нибудь мысли?

эх...было бы здорово,если бы можно было добавлять в запрос условные переходы...тогда все решалось бы легко

Это сообщение отредактировал(а) Lunatikus - 5.9.2007, 11:26


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Lunatikus
Дата 6.9.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



в общем,решил проблему,ограничив число месячев num до 12. в итоге сделал двенадцать идентичных улсовий:
Код

WHERE data=data1 OR (data=DATEADD(month,num-1,data1)) OR (data=DATEADD(month,num-2,data1) AND num-2>=0) OR (data=DATEADD(month,num-3,data1) AND num-3>=0) ...


Это сообщение отредактировал(а) Lunatikus - 6.9.2007, 14:02


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Lunatikus
Дата 7.9.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



схожая прабла,потому не стал новую тему делать.
Пытаюсь перенести данные из одной таблицы в другую.В таблице,куда переношу данные поля data(datetime) и por(float).В таблице-источнике эти поля варчаровые.Подскажите,как в запросе сделать конверт правильно?То,Что у меня-не работает-выдает ошибку конвертации:
Код

INSERT INTO T1(data,por) SELECT data,por FROM T2



--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
ТоляМБА
Дата 7.9.2007, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: нет
Всего: 252



CAST, CONVERT - читаем синтаксис

На какое поле ругается то? И текст запроса и значения пары полей - в студию!
Может у тебя в данных есть пустые или Null значения?
PM   Вверх
Lunatikus
Дата 7.9.2007, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



дату переводит конвертом,а вот с флотом праблы.ни каст ни конверт не помогает:
Код

CONVERT (float,por),CAST(por as float)

ругается что не может привести варчар к флоту


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
ТоляМБА
Дата 7.9.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: нет
Всего: 252



Хм... на этой тачке щаз нет MS-SQL, но ты в BOL (F1) глянь хэлп по каст или в конверт - точно помню в одном из них была таблица возможности перевода из одного типа в другой!  smile 
PM   Вверх
Lunatikus
Дата 7.9.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



я нашел,в чем прабла.Он выдает ошибку,Как только доходит до ненулевого значения поля варчар por.И видит 0,211423325535.Его смущает запятая.Потому что елси поставить точку в варчаровской строке,то переводит спокойно.Вопрос:как везде,где стоит запятая в этом поле поменять на точку?вручную зело долго


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
kobra
Дата 11.9.2007, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 5
Всего: 9



Код

CONVERT (float,REPLACE(por, ',', '.'))

PM MAIL   Вверх
Lunatikus
Дата 11.9.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 2
Всего: 6



гениально!!!! smile  smile  smile спасибо =) жаль раньше не узнал,сейчас уже базу переделал даже,везде где должен быть float стоят точки как разделители))


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.