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

Откуда:
Сообщений: 29
Доброго времени суток, нужна ваша помощь:
Есть таблица с полем типа datetime даты в формате 'dd.mm.gggg 00:00:00'. Мне нужна помощь в написании запроса который бы автоматически вытаскивал текущую дату и отнимал от нее 10 дней а затем все что меньше даного условия удалял.
Тоесть что то вроде такого: delete все что < (нынешняя дата - 10 дней)

База на MSSQL 2005 Express Edition.
10 июн 12, 21:58    [12698092]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Тип данных datetime не имеет "формата". -10 дней Вам позволит сделать функция DATEADD.
10 июн 12, 22:11    [12698115]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
akasha9
Member

Откуда:
Сообщений: 29
pkarklin
-10 дней Вам позволит сделать функция DATEADD.

pkarklin а можно какой-нибуть наглядный пример
11 июн 12, 00:22    [12698314]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
akasha9
pkarklin
-10 дней Вам позволит сделать функция DATEADD.

pkarklin а можно какой-нибуть наглядный пример

Пример из документации недостаточно наглядный?
11 июн 12, 00:25    [12698318]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
SunJun
Member

Откуда:
Сообщений: 135
select dateadd(d,-10,getdate())
11 июн 12, 10:35    [12698593]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
akasha9
Member

Откуда:
Сообщений: 29
select * from theTable
where datetime_field < dateadd( day, -10, getdate() )


Выполнил данный запрос, но вместо результата получил лишь названия всех полей таблицы.
В чем может быть проблема?
13 июн 12, 21:17    [12710462]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
akasha9
select * from theTable
where datetime_field < dateadd( day, -10, getdate() )


Выполнил данный запрос, но вместо результата получил лишь названия всех полей таблицы.
В чем может быть проблема?

Если все так как вы говорите, то значит, в таблице theTable хранятся все поля таблицы =))
Хотя, может быть вы имели ввиду, что получили пустой датасет, который содержал все поля таблицы, но в котором не было ни одной записи?
Тогда проверьте, вашему условию, действительно удовлетворяют какие-то записи в таблице, к которой вы делаете запрос?
13 июн 12, 21:31    [12710489]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
akasha9
Member

Откуда:
Сообщений: 29
SomewhereSomehow
akasha9
пропущено...


Выполнил данный запрос, но вместо результата получил лишь названия всех полей таблицы.
В чем может быть проблема?

Если все так как вы говорите, то значит, в таблице theTable хранятся все поля таблицы =))
Хотя, может быть вы имели ввиду, что получили пустой датасет, который содержал все поля таблицы, но в котором не было ни одной записи?
Тогда проверьте, вашему условию, действительно удовлетворяют какие-то записи в таблице, к которой вы делаете запрос?


Я получили именно пустой датасет, который содержал все поля таблицы, но в котором не было ни одной записи. Таблица содержит данные за последние 12 дней то есть согласно условию она должна была мне вернуть данные за первые два дня?
13 июн 12, 22:04    [12710572]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
akasha9
SomewhereSomehow
пропущено...

Если все так как вы говорите, то значит, в таблице theTable хранятся все поля таблицы =))
Хотя, может быть вы имели ввиду, что получили пустой датасет, который содержал все поля таблицы, но в котором не было ни одной записи?
Тогда проверьте, вашему условию, действительно удовлетворяют какие-то записи в таблице, к которой вы делаете запрос?


Я получили именно пустой датасет, который содержал все поля таблицы, но в котором не было ни одной записи. Таблица содержит данные за последние 12 дней то есть согласно условию она должна была мне вернуть данные за первые два дня?
Где SELECT-то?!
Так и будете всё словами описывать?
Переходите на стихи в таком случае.
13 июн 12, 22:13    [12710590]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
iap,
=)))))

akasha9,
хотя бы давайте запрос который у вас получает данные, и который нет. лучше конечно почитать правила форума, и дать нормально описание...
13 июн 12, 22:26    [12710630]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
akasha9
...Мне нужна помощь в написании запроса который бы автоматически вытаскивал текущую дату и отнимал от нее 10 дней а затем все что меньше даного условия удалял.
Тоесть что то вроде такого: delete все что < (нынешняя дата - 10 дней)
База на MSSQL 2005 Express Edition.

DATEADD (Transact-SQL)
14 июн 12, 06:30    [12711136]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 659
iap, SomewhereSomehow,
Чего вы на человека накинулись, запрос он показал 12710462, оформил конечно неважнецки...

akasha9,
А так что получится?
select  MIN(datetime_field) AS [минимальная дата]
      , dateadd( day, -10, getdate() ) AS [дата для поиска]
    from theTable
14 июн 12, 06:39    [12711142]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
DECLARE @t TABLE (n_pp int, dt datetime);
INSERT INTO @t (n_pp, dt) VALUES 
(1, '20120501'),
(2, '20120505'),
(3, '20120530'),
(4, '20120601'),
(5, '20120610')

SELECT * FROM @t; -- Посмотрим все записи

SELECT * FROM @t WHERE dt < DATEADD(day,-10,GETDATE());
14 июн 12, 06:57    [12711149]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Но мне всё же удивительно, что никакого внимания не обращается
на ненулевое время, которое возвращает GETDATE().
14 июн 12, 09:26    [12711500]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
iap
Но мне всё же удивительно, что никакого внимания не обращается
на ненулевое время, которое возвращает GETDATE().

У топикастера
Есть таблица с полем типа datetime даты в формате 'dd.mm.gggg 00:00:00'
И поэтому я подумал, что время которое выдает GETDATE() - мало влияет на результат...
14 июн 12, 09:34    [12711524]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
akasha9
Member

Откуда:
Сообщений: 29
[IMG]http://s55.radikal.ru/i150/1206/03/48900a9a0e73.jpg[/IMG]


Запрос выполнился, но возникла следующая неприятность идет привязка по времени в результате чего выделяются не все данные удовлетворяющие условию запроса. Как сделать так чтобы в расчет бралась только дата не привязываясь ко времени.
14 июн 12, 22:55    [12716643]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
akasha9
Member

Откуда:
Сообщений: 29
Картинка с другого сайта.

Запрос выполнился, но возникла следующая неприятность идет привязка по времени в результате чего выделяются не все данные удовлетворяющие условию запроса. Как сделать так чтобы в расчет бралась только дата не привязываясь ко времени.
14 июн 12, 23:00    [12716657]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
1. Посмотрите пожалуйста Рекомендации по оформлению сообщений в форуме особенно пункт 6.
2. В начале вашего топика: Есть таблица с полем типа datetime даты в формате 'dd.mm.gggg 00:00:00'
А теперь из рисунка видим, нет... Вы неправильно нам сообщали вначале...
3. Может вам конкретную дату лучше использовать, а не GETDATE() ?
4. Вы хелпом пользуютесь? Или все мелочи спрашивать будете в форуме?
5. Из сообщения: "...в результате чего выделяются не все данные удовлетворяющие условию запроса." Соответсвенно спрашиваем: "А какие данные не выделились?" и опять возвращаемся к пункту 1.
6. Пользуйтесь поиском... Очень часто многое уже обсуждалось.
7. И правильно задавайте вопрос.

Вот теперь приходится гадать, чтобы Вам помочь...

DECLARE @t TABLE (n_pp int, dt datetime);
INSERT INTO @t (n_pp, dt) VALUES 
(1, '20120501 00:00:00.197'),
(2, '20120505'),
(3, '20120530'),
(4, '20120604 23:00:45'),
(5, '20120605'),
(6, '20120605 12:45:12.123'),
(7, '20120610'),
(8, '20120615 00:15:12.458')

SELECT * FROM @t; -- Посмотрим все записи

SELECT * FROM @t WHERE CAST(CONVERT(CHAR(8),dt,112) as datetime) < DATEADD(day,-10,CAST(CONVERT(CHAR(8),GETDATE(),112) as datetime));


И давайте использовать примеры... А не ваш скрин-шот...
15 июн 12, 06:42    [12716999]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
akasha9
Member

Откуда:
Сообщений: 29
Все проблема решена всем откликнувшимся огромное спасибо.

Решил с помощью такого решения:

DELETE FROM theTable
WHERE CONVERT (varchar,datetime_field, 112) < dateadd( DAY, -10, getdate() ) 
18 июн 12, 21:04    [12734573]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с SQL запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
akasha9
Все проблема решена всем откликнувшимся огромное спасибо.

Решил с помощью такого решения:

DELETE FROM theTable
WHERE CONVERT (varchar,datetime_field, 112) < dateadd( DAY, -10, getdate() ) 
И это называется "решил"?!
Никогда не накладывайте условия на функцию от поля,
тем более если можно ограничить само поле:
DELETE theTable
WHERE datetime_field < DATEADD(DAY,DATEDIFF(DAY,0,GETDATE())-10,0);
18 июн 12, 21:34    [12734672]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить