Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Max Tarasov Member Откуда: Сообщений: 14 |
Запрос:select _Period from _AccRgAT25961 WHERE _Period >= '4013-02-01 00:00:00.000' AND _Period < '4013-02-02' возвращает кучу строк такого вида: 4013-02-01 00:00:00.000 А запрос: select _Period from _AccRgAT25961 WHERE _Period = '4013-02-01 00:00:00.000' не возвращает ничего. Как такое может быть? Самое интересное, что запрос: select _Period from _AccRgAT25961 WHERE _Period >= '4013-02-01 23:59:59.999' AND _Period < '4013-02-02' возвращает ровно те же строки... К сообщению приложен файл. Размер - 26Kb |
1 июл 15, 22:13 [17840373] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4422 |
А тип поля _Period у вас какой? |
1 июл 15, 22:27 [17840398] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47063 |
SELECT _Period FROM _AccRgAT25961 WHERE _Period >= '40130201' AND _Period < '40130202' |
2 июл 15, 09:45 [17841593] Ответить | Цитировать Сообщить модератору |
Max Tarasov Member Откуда: Сообщений: 14 |
|
||
2 июл 15, 10:54 [17841905] Ответить | Цитировать Сообщить модератору |
Max Tarasov Member Откуда: Сообщений: 14 |
Чем отличается от моего первого запроса? Суть вопроса не в том, как все таки добиться получения данных, а почему не работает второй запрос. |
||
2 июл 15, 10:55 [17841916] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
'4013-02-01 23:59:59.999' - это 4013-02-02 00:00:00.000 |
||
2 июл 15, 10:56 [17841919] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47063 |
|
||||
2 июл 15, 10:56 [17841925] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Он работает declare @t table(_Period datetime) insert @t values('4013-02-01 00:00:00.000') insert @t values('4013-02-01 00:00:00.000') insert @t values('4013-02-02 00:00:00.000') select * from @t where _period = '4013-02-01 00:00:00.000' |
||
2 июл 15, 10:58 [17841937] Ответить | Цитировать Сообщить модератору |
Winnipuh Member [заблокирован] Откуда: Київ Сообщений: 10428 |
я бы использовал convert и не устраивал ромашку ;-) |
||||
2 июл 15, 10:58 [17841939] Ответить | Цитировать Сообщить модератору |
Max Tarasov Member Откуда: Сообщений: 14 |
Вы правы! Запрос select _Period from _AccRgAT25961 WHERE _Period = '4013-01-02 00:00:00.000' выводит строки 4013-02-01 00:00:00.000 Забавно... |
||||
2 июл 15, 11:04 [17841970] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Вы не знаете, что существует множество _смивольных_ представлений даты/времени ? |
||
2 июл 15, 11:05 [17841978] Ответить | Цитировать Сообщить модератору |
Max Tarasov Member Откуда: Сообщений: 14 |
Теперь знаю. А не порекомендуете, как вывести дату, чтобы ее символьное представление не оставляло разночтения. Поясню. Если я налагаю условие _Period >= '4013-01-02 00:00:00.000' AND _Period < '4013-02-02' то получаю две строки 4013-02-01 00:00:00.000 Если же налагаю условие
_Period = '4013-01-02 00:00:00.000'
то получаю одну строка 4013-02-01 00:00:00.000 Делаю вывод, что в первом случае хотя и выглядят даты одинаковыми, но содержат разные значения. |
||||
2 июл 15, 11:32 [17842142] Ответить | Цитировать Сообщить модератору |
londinium Member Откуда: Киев Сообщений: 1195 |
Я бы использовал YYYYMMDD (20150201)-1 февраля 2015 года |
||
2 июл 15, 11:34 [17842158] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
FAQ |
2 июл 15, 11:35 [17842166] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47063 |
Читайте внимательно здесь: https://msdn.microsoft.com/ru-ru/library/ms180878(v=sql.100).aspx И местный FAQ |
||||
2 июл 15, 11:36 [17842183] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8488 |
Max Tarasov, дефисы в представлении даты из каких соображений? Еще один "интуитивный программист"... |
2 июл 15, 11:52 [17842340] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47063 |
получится стандартный строковый формат (126), всегда однозначно интерпретирующийся без явного конвертирования. |
||
2 июл 15, 12:08 [17842496] Ответить | Цитировать Сообщить модератору |
StarikNavy Member Откуда: Москва Сообщений: 2397 |
set dateformat ymd (перед запросом) |
||
2 июл 15, 13:07 [17842930] Ответить | Цитировать Сообщить модератору |
Max Tarasov Member Откуда: Сообщений: 14 |
Похоже, какие-то проблемы с индексом. Пока разбираюсь. |
2 июл 15, 13:09 [17842942] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47063 |
![]() А попробуйте это в функции или представлении написать! |
||||
2 июл 15, 13:09 [17842943] Ответить | Цитировать Сообщить модератору |
SQL2008 Member Откуда: Москва Сообщений: 4422 |
также без явного конвертирования и всегда однозначно (пока, по крайней мере для меня) вопринимается дата в формате текста в виде 'YYYYMMDD' Т.е.
'20150702'
|
||||
2 июл 15, 13:10 [17842950] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47063 |
Я и в этой теме об этом писал! ![]() И даже ссылку на все подробности про даты в T-SQL дал |
||||
2 июл 15, 13:11 [17842967] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |