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

Откуда:
Сообщений: 2
Есть таблица вида:

№ |Дата регистрации |Дата Записи |
1 | 01.01.2012 | 03.01.2012 12:30:05 |
2 | 12.03.2012 | 12.03.2012 11:38:00 |
3 | 14.05.2012 | 13.05.2012 14:05:00 |
4 | 16.12.2012 | 17.12.2012 18:15:10 |
5 | 28.02.2012 | 28.02.2012 9:00:00 |

Требуется сравнить столбец "Дата регистрации" и "Дата записи" таким образом, чтобы дт.рег <> дт.зап только по дням, не учитывая время.

Результат нужен такой:

№ |Дата регистрации |Дата Записи |
1 | 01.01.2012 | 03.01.2012 12:30:05 |
3 | 14.05.2012 | 13.05.2012 14:05:00 |
4 | 16.12.2012 | 17.12.2012 18:15:10 |

Есть скриптик где отбирали если меньше:
select dtreg, dtzap, №
from 12345 (не важно какая таблица)
where (dtreg <cast(datepart(dd.mm.yyyy, dtzap) as varchar(10))) and (dtreg > convert(datetime, '2011-12-31 00:00:00', 102)

А с <> такое не прокатывает.

Как правильно то написать запрос?

(если что, я типа блондинки, полный чайник и все такое)
12 фев 15, 15:01    [17256397]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, помогите с запросом.  [new]
Glory
Member

Откуда:
Сообщений: 104760
вам поможет datediff
12 фев 15, 15:04    [17256423]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, помогите с запросом.  [new]
londinium
Member

Откуда: Киев
Сообщений: 1176
я чего-то не понял, или так:
 SELECT * FROM TABLEA A WHERE CAST(A.RegistrationDate AS DATE)<>CAST(A.RecordDate AS DATE)
12 фев 15, 15:08    [17256450]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, помогите с запросом.  [new]
dasha_d
Member

Откуда:
Сообщений: 2
Спасибо конечно, я про эту функцию обчиталась.
Не могу составить правильно запрос.

Я не волшебник, только учусь.
Как его использовать в моем случае?
12 фев 15, 15:09    [17256453]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, помогите с запросом.  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Поскольку индексы всё равно невозможно применить при такой структуре таблицы, то
DATEDIFF(DAY,[Дата регистрации],[Дата Записи])=0
если нужны равные даты.

Однако, если сделать вычисляемые поля, например,
[День регистрации] AS CONVERT(CHAR(8),[Дата регистрации],112),
[День записи] AS CONVERT(CHAR(8),[Дата записи],112)
, а по ним сделать индексы, то можно их сравнивать операторами = и <> очень эффективно.
12 фев 15, 15:10    [17256460]     Ответить | Цитировать Сообщить модератору
 Re: Пожалуйста, помогите с запросом.  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
iap
Поскольку индексы всё равно невозможно применить при такой структуре таблицы, то
DATEDIFF(DAY,[Дата регистрации],[Дата Записи])=0

если нужны равные даты.

Однако, если сделать вычисляемые поля, например,
[День регистрации] AS CONVERT(CHAR(8),[Дата регистрации],112),
[День записи] AS CONVERT(CHAR(8),[Дата записи],112)

, а по ним сделать индексы, то можно их сравнивать операторами = и <> очень эффективно.
Начиная с SQL2008, можно и к DATE приводить конечно:,
[День регистрации] AS CAST([Дата регистрации] AS DATE),
[День записи] AS CAST([Дата записи] AS DATE)


Сообщение было отредактировано: 12 фев 15, 15:15
12 фев 15, 15:12    [17256473]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить