2014-01-23 5 views
0

Thread переехал: INT comparison without WHERE statementсравнения INT без WHERE

+0

Каким должен быть результат вашего запроса? –

+1

Зачем вам это нужно, без чего? –

+1

Вы не можете. Дело не в том, как работает SQL: вам нужно поместить его в предложение WHERE (которое все еще является частью выбора в целом). –

ответ

2

мелочи, у вас есть по крайней мере три синтаксических ошибок в запросе. После 0-го дня есть запятая, отсутствие финитной даты в датах() и знак двойного равенства. Что касается того, что вы пытаетесь выполнить, это может быть способ построения случая.

select case 
when datediff(day, date1, date2) = 0 then 'Day 0' 
when abs(datediff(day, date1, date2)) = 1 then 'Day 1' 
else 'something else' end WhatDay 
from etc 

Возможно, вам нужно предложение where, чтобы вы не запрашивали всю таблицу. Делать это редко необходимо.

0

Если вам нужно несколько столбцов, то у вас есть только один реалистичный выбор, инструкция CASE, но это грязно. Однако, с небольшим соединением, мы можем сделать его более чистым. Давайте предположим, что ключ для таблицы Id, мы могли бы написать такое заявление:

SELECT t.*, 
    CASE WHEN i.diff = 0 THEN 'Day 0' ELSE NULL END AS Day0, 
    CASE WHEN i.diff = 1 THEN 'Day 1' ELSE NULL END AS Day1, 
    CASE WHEN i.diff = 2 THEN 'Day 2' ELSE NULL END AS Day2, 
    CASE WHEN i.diff = 3 THEN 'Day 3' ELSE NULL END AS Day3, 
    CASE WHEN i.diff = 4 THEN 'Day 4' ELSE NULL END AS Day4, 
    CASE WHEN i.diff = 5 THEN 'Day 5' ELSE NULL END AS Day5, 
FROM table t 
    JOIN (
     SELECT Id, DATEDIFF(
      STR_TO_DATE(date, '%Y-%m-%d %H:%i:%s'), b.datetwo 
     ) AS diff 
     FROM table 
    ) i ON i.Id = t.Id AND i.diff >= 0 AND i.diff <= 5 

С этим утверждением мы теперь знаем, что ведро каждая строка попадает; если значение не равно NULL.

Смежные вопросы