Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
Всем привет, мне необходимо найти все цены на продкты и названия продуктов, но только тех Date которых не равна 2017 году. сделал пару вариантов SELECT p.price, g.mark FROM price p INNER JOIN goods g ON p.gID = g.gID WHERE p.date <> '2017-06-01'; GO SELECT p.price, g.mark FROM price p INNER JOIN goods g ON p.gID = g.gID WHERE p.date NOT BETWEEN '2017-01-01' AND '2017-12-31'; GO -- не стал джойнить тут, SELECT price FROM price EXCEPT SELECT price FROM price WHERE date BETWEEN '2017-01-01' AND '2017-12-31'; GO есть еще вариант с datepart SELECT p.price, g.mark FROM price p INNER JOIN goods g ON p.gID = g.gID WHERE p.date <> CAST(DATEPART(year, '2017-01-01') as varchar(20)); однако последний вариант выводит мне все значения, в том числе и те, которые мне не нужны Как еще можно найти цены на товары если мне допустим нужны все даты кроме 2017 года... САМИ таблицы CREATE TABLE goods ( gID INT, mark varchar(20), estdate DATE, CONSTRAINT PK_gID PRIMARY KEY (gID) ); GO CREATE TABLE Price ( pID INT, price INT, gID INT, date DATE, CONSTRAINT PK_pID PRIMARY KEY(pID) ); GO INSERT INTO goods VALUES (1, 'skies', '2008-01-01'), (2, 'skies', '2007-01-01'), (3, 'ball', '2007-01-01'); GO INSERT INTO price VALUES (1, 10, 3, '2018-01-01'), (2, 20, 3, '2019-01-01'), (3, 9, 3, '2017-06-01'), (4, 25, 1, '2018-11-01'); GO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 15:02 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
Самый правильный с т.з. поиска это пожалуй where (p.date < '20170101' or p.date >= '20180101') А самый лаконичный, но при этом медленный where year(p.date)<>2017 зы: Любое преобразование в фильтре - потенциальные тормоза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 15:22 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
L_argoСамый правильный с т.з. поиска это пожалуй where (p.date < '20170101' or p.date >= '20180101') А самый лаконичный, но при этом медленный where year(p.date)<>2017 зы: Любое преобразование в фильтре - потенциальные тормоза.Короче: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 15:43 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
с DATEPART переделал SELECT p.price, g.mark FROM price p INNER JOIN goods g ON p.gID = g.gID WHERE DATEPART(year, p.date) <> 2017; GO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 15:52 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
L_argoзы: Любое преобразование в фильтре - потенциальные тормоза. dermamaс DATEPART переделал А в результате мартышка взяла гранату и выдернула чеку... Ну и зачем было так делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 16:33 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
Руслан Дамирович, Не совсем вас понял) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 16:36 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
Руслан Дамирович, Тоесть понял, смысл что с datepart будет более ресурсотребовательное, однако для меня важно лишь сделать различными способами, в плане понятия материала и обучения, вот) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 16:37 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
dermamaРуслан Дамирович, Тоесть понял, смысл что с datepart будет более ресурсотребовательное, однако для меня важно лишь сделать различными способами, в плане понятия материала и обучения, вот) Смысл образования не только научить забивать гвозди, но при этом научить использовать для этого микроскопмолоток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 16:56 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
[quot Руслан Дамирович]dermamaРуслан Дамирович, Смысл образования не только научить забивать гвозди, но при этом научить использовать для этого микроскопмолоток. Вот поэтому начал изучать книгу сборник рецептов Энтони Молинаро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 17:00 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
dermamaВот поэтому начал изучать книгу сборник рецептов Энтони Молинаро. Перепиши запрос, и больше не греши... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 17:10 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
dermamaсборник рецептов Энтони Молинаро.Книга, в которой: - таблицы в предложении FROM перечисляются через запятую - даются примеры на вывод строк в определенном порядке без использования order by - используется not in (select ...) вместо not exists(select ...) На сборник тецептов не тянет. Совсем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 17:26 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
invmdermamaсборник рецептов Энтони Молинаро.Книга, в которой: - таблицы в предложении FROM перечисляются через запятую - даются примеры на вывод строк в определенном порядке без использования order by - используется not in (select ...) вместо not exists(select ...) На сборник тецептов не тянет. Совсем. ничто не идеально, во всем есть огрехи) однако там 668 страниц. я уже знаю , что вы ответите примерно "достаточно увидеть, как он объясняет это , чтобы понять всю суть книги" , а я всеравно прочту и сделаю потом свой вывод) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 18:07 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
dermama Тоесть понял, смысл что с datepart будет более ресурсотребовательноеНеправильно понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 18:22 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
SERG1257dermama Тоесть понял, смысл что с datepart будет более ресурсотребовательноеНеправильно понял Можно объяснить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 18:28 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
dermama, Код: sql 1. 2. 3. 4. 5. 6. Никогда так не делайте. Потому что 12-31 может быть месяц-число, а может быть число-месяц. Делайте так Код: sql 1. 2. 3. 4. 5. 6. Потому что 112 - это ISO формат YYYYMMDD . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 18:33 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
Делайте такЗачем так сложно, если можно явно указать p.date > '20170101' и оно не перепутается локальными настройками ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 18:44 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
dermama Можно объяснить?Проиндексируйте поле с датой. Посмотрите планы для запросов с where p.date < '2017' or p.date >= '2018' и DATEPART(year, p.date) <> 2017 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 18:59 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
L_argoДелайте такЗачем так сложно, если можно Чтобы сформировать рефлекс. Чтобы делать кошерно на уровне автоматизма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 19:00 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
Andy_OLAPL_argoЗачем так сложно, если можно Чтобы сформировать рефлекс. Чтобы делать кошерно на уровне автоматизма.Зачем неправильный рефлекс? Правильный рефлекс - использовать литералы даты-времени в формате, который всегда однозначно распознаётся сервером, не зависит ни от каких натроек, и при этом короткий. То есть использовать сиквельный литерал дата-время, вида "ISO формат YYYYMMDD", без странных преобразований из целочисленного литерала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 19:38 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
dermamainvmпропущено... Книга, в которой: - таблицы в предложении FROM перечисляются через запятую - даются примеры на вывод строк в определенном порядке без использования order by - используется not in (select ...) вместо not exists(select ...) На сборник тецептов не тянет. Совсем. ничто не идеально, во всем есть огрехи) однако там 668 страниц. я уже знаю , что вы ответите примерно "достаточно увидеть, как он объясняет это , чтобы понять всю суть книги" , а я всеравно прочту и сделаю потом свой вывод)Читайте правильные книги. Ицика Бен-Гана, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 19:41 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
alexeyvgв формате, который всегда однозначно распознаётся сервером, не зависит ни от каких натроек convert(datetime,...,112) всегда однозначно определяется сервером alexeyvgи при этом короткий Я не понимаю, откуда такая тяга у российских разработчиков. Однострочники perl, компактные выражения. Краткость - сестра таланта. Но мачеха гонорара. Вы же работаете с молодыми, Вы понимаете, кто идет на смену. Или составляете выражения так, чтобы индус, которого разбудили в полночь, понял спросонья, или получаете рано или поздно проблемы. Не нужно коротко. Нужно понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 19:53 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
Andy_OLAPalexeyvgв формате, который всегда однозначно распознаётся сервером, не зависит ни от каких натроек convert(datetime,...,112) всегда однозначно определяется сервером'20170101' тоже всегда однозначно распознаётся сервером. Из тысяч однозначно определяемых сервером вариантов константы даты, которое можно написать, нужно использовать тот, который будет короткий, то есть понятный. В документации есть страничка про типы, вот её и нужно использовать. Там вполне понятные литералы, и с компактной записью. PS Я даже боюсь думать, сколько строк займут при таком подходе константы varchar или float :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 20:13 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
Оспадя... Человек смотрит учится набивает шишки. А ему сразу заботливые мамы бабушки "шапку надень" "никогда так не делай" "качели на морозе не лижи"... Теория она всегда хороша в вакууме, но лучший способ обучения - это рефакторинг своего же кода, когда надо внести изменения в какой то процесс, и ты сидишь и думаешь "а вот если бы я там сделал бы по-другому, то сейчас изменить было бы гораздо проще". Тут имхо проблема в примерах, что они наверняка в том же вакууме и я лично не уверен, что к моменту объяснения операторов сравнения уже объяснены джойны. Иначе это вот войдёт в шаблон - выборка по фильтру с self join. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 20:49 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
Упс, там не self join. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 20:52 |
|
||
|
Проблема с датами.
|
|||
|---|---|---|---|
|
#18+
alexeyvgAndy_OLAPпропущено... convert(datetime,...,112) всегда однозначно определяется сервером '20170101' тоже всегда однозначно распознаётся сервером. справедливости ради, в данном случае будет неявное преобразование типов в случае сравнения с датой безусловно, YYYYMMDD как формат даты беспроигрышный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2018, 22:06 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39754653&tid=1688369]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 277ms |
| total: | 444ms |

| 0 / 0 |
