Найти между разделенными полями даты (год, месяц, день) - PullRequest
2 голосов
/ 02 июля 2011

У меня есть следующие даты в моей таблице в отдельных полях.Как я могу написать запрос, чтобы показать значения между двумя датами.Например: значения между 1 февраля 2011 года и 2 июня 2011 года:

day         month            year          value 
--------------------------------------------------
2             6                2011         120
3             7                2011         130
5             5                2011         100
6             1                2011         50

Ответы [ 5 ]

3 голосов
/ 11 декабря 2012

У меня был тот же сценарий, но в столбце «Месяц» отображалось название месяца. С небольшими изменениями в данном запросе я смог получить данные.

SELECT        *
FROM            Table_Name AS Tbl_Date
WHERE        (Year * 10000 + DATEPART(mm, CAST(Month + Year AS DATETIME)) * 100 + 1 
BETWEEN 20111101 AND 20121201)

Надеюсь, это поможет

3 голосов
/ 02 июля 2011

Как уже говорили другие, мое первое предложение будет использовать Date.Или, если вам нужна более подробная информация, чем ваш пример, Datetime или Timestamp with Time Zone.

Но если вам действительно нужно работать с этими данными, я думаю, что-то вроде этого должно работать, в зависимости от вашего вида SQL:

SELECT value, CONVERT(DATE,CONCAT(CONCAT(CONCAT(CONCAT(day, "-"), month), "-"), year), 105) date FROM table_name where (2/1/2011) <= date and date <= (2/6/2011);

(в Oracle SQL вы можете использовать to_date вместо конвертации и опционально использовать оператор конкатенации ||; для SQL-сервера вы должны использовать оператор конкатенации +; с MySQL это должно быть правильно)

(01.02.2011) и (06.06.2011) могут быть либо строками, которые вы конвертируете аналогично другому конвертированию, либо вводиться с использованием PreparedStatement или чем-то вроде этого непосредственно в качестве дат (это будетпредпочтительнее).

2 голосов
/ 02 июля 2011

Чтобы преобразовать в Date для более простых сравнений, не беспокоясь о dmy или mdy, стандартным способом:

 DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0)))

Итак, как-то так. самый безопасный формат даты для использования - yyyymmdd (особенно с SQL Server)

SELECT
  value,
  DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0))) AS realdate
FROM Mytable_name
WHERE
  '20110201' <= DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0))) 
  and
  DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0))) <= '20110206'
1 голос
/ 20 июля 2011

ну я нашел ответ, который хотел, спасибо, ребята

SELECT Tbl_Date.Value,Tbl_Date.Year,Tbl_Date.Month,Tbl_Date.Day from Tbl_Date
where   ((Tbl_Date.Year*10000)+(Tbl_Date.Month*100)+Tbl_Date.Day)  between 110102 and 110602 
1 голос
/ 04 июля 2011

если вы используете базу данных Oracle, вы можете использовать функции TO_DATE и TO_CHAR для достижения этой цели ...

как следует-

  select * from table_name 
  where to_date(day||month||year,'DDMMYYYY') 
  between &mindate and &maxdate

минимальная дата, которую можно указать 2 января 2011 года, а максимальная дата - 2 июня 2011 года

Я надеюсь, что это должно работать для вас:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...