Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2012, 07:37   #1
Swatch
Форумчанин
 
Регистрация: 05.07.2009
Сообщений: 209
Вопрос Обновить поля с датами

Здравствуйте! Подскажите, пожалуйста, как можно в таблице на SQL Server обновить поле с датами, типа datetime. Нужно обновить все даты, изменив значения на первое число месяца. Т.е. было:
20.09.2012
15.10.2012
04.11.2012
а стало
01.09.2012
01.10.2012
01.11.2012
Какую функцию применить?
Состряпала вот это
Код:
update ТН_Нормы1 set DataVvoda=convert(datetime,replace(convert(nvarchar(10),DataVvoda,104),Left(convert(nvarchar(10),DataVvoda,104),2),'01'),104)
Начинает вроде обрабатывать записи...Но потом выдает ошибку:
Server: Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type datetime.
Проверила поле с датами. Все даты начиная с 08.12.2008 и по 12.10.2012. Не понимаю, от чего возникает переполнение?

Последний раз редактировалось Swatch; 12.11.2012 в 08:18.
Swatch вне форума Ответить с цитированием
Старый 12.11.2012, 09:40   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

попробуйте в запрос добавить
where DataVvoda is not null:
Код:
pdate ТН_Нормы1 
   set DataVvoda=convert(datetime,replace(convert(nvarchar(10),DataVvoda,104),Left(convert(nvarchar(10),DataVvoda,104),2),'01'),104)
where DataVvoda is not null
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.11.2012, 10:47   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Потому что REPLACE('20.12.2012','20','01')='01 .12.0112' и последующая попытка конвертировать в datetime валит запрос. Используйте
Код:
DATEADD(day,1-DAY(DataVvoda),DataVvoda)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2012, 16:33   #4
BeJIuKuu_Hexo4yxa
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 96
По умолчанию

в Oracle такая удобная функция есть, может и в SQL Server тоже.

trunc(<ваша дата>,'mm') - обрезает дату до 1 числа месяца.
если 'yyyy' - то на 1 число года
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (Стив Макконнелл)
BeJIuKuu_Hexo4yxa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Измененние цвета фона поля (поля со списком) при редактировании TimRus Microsoft Office Access 2 17.05.2010 21:56
получить данные поля исходя из lookup-поля malayka Помощь студентам 0 21.04.2010 21:19
как получить значение поля грид на основе значения другого lookUp поля malayka БД в Delphi 0 21.04.2010 19:06
Выявление одинаковости значений поля в одной талице по значению поля в другой nikmay SQL, базы данных 4 13.08.2009 12:51