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

Откуда:
Сообщений: 36070
Всем привет!

Есть таблица, у которой из за проблем с переходом на зимнее/летнее время некоторые даты были записаны не те, которые нужно, а на час назад. (администраторы серверов накосячили)
Так вот, нужно запросом выбрать записи с неправильной датой, она смещена на сутки назад и время стоит 23 часа, и поменять дату на правильную на день вперед, и с нулевым временем 0 часов 0 минут.
Подскажите, как это сделать запросом.
1 ноя 13, 11:15    [15063097]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
Glory
Member

Откуда:
Сообщений: 104760
windrider
она смещена на сутки назад и время стоит 23 часа,

Смещена от чего ?
1 ноя 13, 11:16    [15063104]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
windrider
Member

Откуда:
Сообщений: 36070
Glory
windrider
она смещена на сутки назад и время стоит 23 часа,

Смещена от чего ?


Относительно той даты, которая должна быть записана в базу. Например, пользователь ввел 2010-12-31 00:00:00.000, в базе же записалось 2010-12-30 23:00:00.000
Требуется эти записи найти и исправить в них дату на правильную.
1 ноя 13, 11:25    [15063171]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
Glory
Member

Откуда:
Сообщений: 104760
windrider
Например, пользователь ввел 2010-12-31 00:00:00.000, в базе же записалось 2010-12-30 23:00:00.000

Откуда вы знаете, что ввел пользователь то ?
Или вы просто хотите выбрать данные в диапазоне 2010-12-31 00:00:00.000 - 2010-12-31 23:59:59.000 ?
1 ноя 13, 11:28    [15063217]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31439
windrider
Так вот, нужно запросом выбрать записи с неправильной датой, она смещена на сутки назад и время стоит 23 часа, и поменять дату на правильную на день вперед, и с нулевым временем 0 часов 0 минут.
Подскажите, как это сделать запросом.
Нужно сначала написать запрос для выборки нужных вам строк в таблице, проверить, потом переделать его в запрос на удаление.

Запрос для выборки пишется исходя из ваших условий. Непонятно, что значит "она смещена на сутки назад", если просто "время стоит 23 часа", то см. функцию DATEPART
"поменять дату на правильную на день вперед" - см функцию DATEADD, нужно прибавить один час
1 ноя 13, 11:30    [15063244]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
o-o
Guest
пример выбирает все даты за 03-10-2013 с 23 часов до конца суток и меняет их на 04-10-2013, 0 часов
declare @t table(dt datetime)
insert into @t values
('20131003 22:01:00'),
('20131003 23:01:00'),
('20131003 23:50:00'),
('20131004 23:01:00')

update @t
set dt = '20131004' 
where dt between '20131003 23:00:00' and '20131003 23:59:59.999'

select *
from @t
---------------------
2013-10-03 22:01:00.000
2013-10-04 00:00:00.000
2013-10-04 00:00:00.000
2013-10-04 23:01:00.000
1 ноя 13, 11:32    [15063276]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
windrider
Member

Откуда:
Сообщений: 36070
Glory
windrider
Например, пользователь ввел 2010-12-31 00:00:00.000, в базе же записалось 2010-12-30 23:00:00.000

Откуда вы знаете, что ввел пользователь то ?
Или вы просто хотите выбрать данные в диапазоне 2010-12-31 00:00:00.000 - 2010-12-31 23:59:59.000 ?


Знаем потому, что пользователи начали жаловаться на то, что даты отображаются не те, что надо.
В итоге выяснилось, что это косяк с сервером. Там все наладили, но неправильные даты из базы никуда не пропали.
Хочу выбрать не просто из диапазона, а именно даты, у которых стоит 23 часа. И поменять эту дату на сутки вперед, но с 0 часов 0 минут 0 секунд.
1 ноя 13, 11:33    [15063283]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
Glory
Member

Откуда:
Сообщений: 104760
windrider
Хочу выбрать не просто из диапазона, а именно даты, у которых стоит 23 часа.

И в чем проблема ? Есть datepart
windrider
И поменять эту дату на сутки вперед, но с 0 часов 0 минут 0 секунд.

И ч ем проблема ? Есть dateadd
1 ноя 13, 11:34    [15063291]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
windrider
Member

Откуда:
Сообщений: 36070
Glory
windrider
Хочу выбрать не просто из диапазона, а именно даты, у которых стоит 23 часа.

И в чем проблема ? Есть datepart
windrider
И поменять эту дату на сутки вперед, но с 0 часов 0 минут 0 секунд.

И ч ем проблема ? Есть dateadd


Проблемы нет. Просто не знал об этих функциях. Спасибо за подсказку.
1 ноя 13, 11:40    [15063359]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
windrider
Member

Откуда:
Сообщений: 36070
Запрос на обновление дат сделан, еще раз спасибо за подсказку.
1 ноя 13, 13:55    [15064747]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить