SQL Добавить новую временную метку, если DATE находится между (Kinda Static Date) Условие - PullRequest
1 голос
/ 06 июля 2011

Поэтому мне нужно добавить метку времени в набор результатов, если запись попадает в это условие.

Пример:

  • Используя сегодняшнюю дату «07-06-2011» для сравнения с датой и временем, мне нужно добавить метку времени в набор результатов, если запись попадает между метками времени 10 марта и 11 апреля 2011 года

  • Используя временную метку «08-01-2011» для сравнения с датой, мне нужно добавить временную метку к набору результатов, если запись попадает между 10 апреля и 11 мая 2011 года

и так далее ...

Возникли проблемы с синтаксисом и как рассчитать конкретные даты, какие-либо идеи?

Пример данных, запущенных для даты: "07-06-2011"

  • любая дата июля должна работать, но 10 марта 2011 г. и 11 апреля 2011 г. должны оставаться неизменными до августа. Тогда это должны быть следующие два одновременных месяца

.

date_feild       new_date_feild
------------     --------------
"03-09-2011" 
"03-15-2011"     "07-06-2011"
"04-10-2011"     "07-06-2011"
"04-15-2011      

Псевдо-запрос:

SELECT date_feild, CASE
    WHEN date_field BETWEEN (three months ago on the 10th) AND (two months ago on the 11th)
    THEN NOW() AS new_date_feild
END
FROM tbl_name
WHERE other_conditions

Наверное, я хотел бы знать, как получить эти даты в этом формате:

  • три месяца назад 10
  • два месяца назад 11

UPDATE:

Ну, я придумал этот беспорядок запроса, может кто-нибудь еще помочь с этим?

SELECT TO_DATE(
    TEXTCAT(
        TEXTCAT(
            TEXTCAT(
                date_part('YEARS', CURRENT_DATE - INTERVAL '3 MONTHS'),
            '-'),
        date_part('MONTHS', CURRENT_DATE - INTERVAL '3 MONTHS')),
    '-10'),'YYYY-MM-DD') AS previous_date,
TO_DATE(
    TEXTCAT(
        TEXTCAT(
            TEXTCAT(
                date_part('YEARS', CURRENT_DATE - INTERVAL '3 MONTHS'),
            '-'),
        date_part('MONTHS', CURRENT_DATE - INTERVAL '3 MONTHS')),
    '-10'),'YYYY-MM-DD') + INTERVAL '1 MONTH' + INTERVAL '1 DAY' AS next_previous_date

Ответы [ 2 ]

0 голосов
/ 07 июля 2011

Ну, вот что у меня есть, но я не очень доволен этим:

SELECT TO_DATE(
    TEXTCAT(
        TEXTCAT(
            TEXTCAT(
                date_part('YEARS', CURRENT_DATE - INTERVAL '3 MONTHS'),
            '-'),
        date_part('MONTHS', CURRENT_DATE - INTERVAL '3 MONTHS')),
    '-10'),'YYYY-MM-DD') AS previous_date,
TO_DATE(
    TEXTCAT(
        TEXTCAT(
            TEXTCAT(
                date_part('YEARS', CURRENT_DATE - INTERVAL '3 MONTHS'),
            '-'),
        date_part('MONTHS', CURRENT_DATE - INTERVAL '3 MONTHS')),
    '-10'),'YYYY-MM-DD') + INTERVAL '1 MONTH' + INTERVAL '1 DAY' AS next_previous_date
0 голосов
/ 06 июля 2011

Попробуйте вместо этого использовать DateTime или просто Date.Это проще для сравнения.У меня была похожая проблема, хотя и гораздо менее сложная.

Вот простая ссылка на различные способы и эффективность: http://demiliani.com/blog/archive/2006/01/19/3384.aspx

Также довольно просто получить текущую дату в Java,хотя мне потребовалось вечно, чтобы понять это.Вот как я это сделал:

//Get current DateTime
    java.util.Date javaDate = new java.util.Date();
    long javaTime = javaDate.getTime();
    java.sql.Date sqlDate = new java.sql.Date(javaTime);
    java.sql.Time sqlTime = new java.sql.Time(javaTime);
    String dateTime = sqlDate.toString() + " " + sqlTime.toString();

Это немного странно, но, похоже, sql справляется с этим гораздо лучше.

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