postgres select all dates from interval - sql

How to with Postgres I Could retrieve all dates using parameters 'from' and 'until'
example:
select date from 'maybe a system table' where date >= :from and date <= :to
then te result is for (02-01-2015 and 05-01-2015)
date
------------
02-01-2015
03-01-2015
04-01-2015
05-01-2015
What is the Best way to do this with Postgres, I know how to do with Oracle, but I need change my Database?? I Want to do a join with a table that does not have register with all dates and my report needs all days in one days interval
Regards

In Postgres, you can use generate_series(). Here is an example for the days in January, 2015:
select generate_series('2015-01-01'::timestamp, '2015-01-31'::timestamp,
'1 day')::date

Related

how to select all entries having date 25-11-20 in oracle 11g?

sql table
here in the table above named carpooling contains a column name start_on which has date time as timestamp i have to write a query to select all the rows having date as 25-11-20 using to_char and to_date.
You write a timestamp literal like this:
timestamp '2020-11-25 00:00:00'
so the full filtering condition will be
where start_on >= timestamp '2020-11-25 00:00:00'
and start_on < timestamp '2020-11-26 00:00:00'
Note that dates and timestamps are different in Oracle, and dates include times down to the second (this is for historical reasons - originally there was only the date type, and timestamp was added much later).
Use the TRUNC function, along with date and interval literals:
SELECT *
FROM CARPOOLING
WHERE START_ON BETWEEN DATE '2020-11-25'
AND (DATE '2020-11-26' - INTERVAL '0.000001' SECOND)
You can simply use to_date, but it's recommended to remove the time when comparing the dates. Otherwise, rows having the same date, but a different time will not be selected. Removing the time can be done using TRUNC.
So you can do something like this:
SELECT * FROM carpooling
WHERE TRUNC(start_on) = TO_DATE('2020-11-25','yyyy.mm.dd');
If you don't want to check the 25th of November 2020, but another data, change the date to match your goal.

Date math with Django SQL Explorer

I have implemented Django SQL Explorer on a project and am attempting to build a query that will pull entries between today's date and 12 months prior to today's date, but I'm having a difficult time figuring out how SQL Explorer does date math. So far, about the only thing I've been able to discover is that SQL Explorer uses current_date for today's date.
So:
SELECT current_date;
returns:
2021-10-02
I've tried using the MySQL implementation (since that's the database my project is using):
SELECT current_date - INTERVAL 12 MONTH;
returns:
near "12": syntax error
About the closest I've been able to come is some very simple math that just work on the year and strips all the rest of the date information away:
SELECT current_date - 1;
returns:
2020
Can anyone please help me figure out how to return the date 12 months prior to today's date in Django SQL Explorer?
SELECT current_date
SELECT current_date - [12 MONTH];
should return:
2021-10-02
2020-10-02
Thanks in advance!
I suspect that you are using SQLite and not MySql, in which case you want:
SELECT date(CURRENT_DATE, '-12 month')
Or:
SELECT date(CURRENT_DATE, '-1 year')
You must use DATE_SUB function in MySQL syntax. for example:
SELECT DATE_SUB('2021-10-02', INTERVAL 1 YEAR);
or
SELECT DATE_SUB('2021-10-02', INTERVAL 12 MONTH);

Filter timestamp by specific month-year

I am new to postgres and would appreciate any advice. I have postgres table with a timestamp column whose values are in the format: 1970-01-01 00:00:00
My objective is to select records from the last three whole months - December 2016, January 2017 and February 2017. How would one write this query with only read access using SELECT?
When I start with:
SELECT to_char("start_time", 'YYYY-MM-DD HH:MM:SS') FROM trips;
Times are converted to AM/PM but I am only interested in extracting and subsetting by month and year
Here you go:
SELECT *
FROM trips
WHERE start_time BETWEEN '2016-01-01 00:00:00'::timestamp AND '2017-02-28 23:59:59'::timestamp;
You can use extract or date_trunc function to extract month in postgresql.
Very similar to question get last three month records from table
For more details about date time functions in postgresql use below link.
https://www.postgresql.org/docs/9.1/static/functions-datetime.html
Here is one method:
select t.*
from t
where start_date >= date_trunc('month',now() - interval '3' month) and
start_date < date_trunc('month', now());

Calculating time difference between 2 dates in Teradata

I'm trying to calculate time difference (in months) between the current date, and the date the customer opened his account (only for those who joined in January 2012).
I try to use current_date and cast, but I think my problem is in my date field which is in the following format: dd/mm/yyyy
I'm working on Teradata.
Your help will be appreciated.
You can try like this:
SELECT CURRENT_DATE - CAST('2016-06-06' AS DATE) MONTH(4);
and if your date is in dd/mm/yyyy format then you can try like
SELECT CURRENT_DATE - cast(myDate as date format 'YYYY-MM-DD') MONTH(4);

How to retrieve the records based on a date from oracle database

I have a table with date column in it. I need to fetch the records from it based on
the given date.
Currently when i used the query:
select * from workingemployee_data where created_date like '20-Jan-2012'
I am getting those records which have created_date on 20-Jan-2012
But i want to get the records those were created 10 days earlier to a given
date (i.e) 20-Jan-2012.
Please suggest me on this.
This gives all records between today and 10 days ago:
SELECT *
FROM workingemployee
WHERE created_date BETWEEN sysdate - INTERVAL '10' DAY
AND sysdate
This gives all records entered exactly 10 days ago:
SELECT *
FROM workingemployee
WHERE created_date = sysdate - INTERVAL '10' DAY
Replace sysdate with exact date if you want.
Why do you use like and not = ?
Assuming that created_date is of type DATE, it's bad practice to rely on implicit conversion according to NLS_DATE_FORMAT (this is what happens when you compare a date and a string)
dd-mon-yyyy isn't a good format for querying since it deffers according to NLS_LANGUAGE better use mm for months numbers
So, either use #mvp's answer or do something like this:
SELECT *
FROM workingemployee
WHERE trunc(created_date) = to_date('20-01-2013', 'dd-mm-yyyy') - 10
SELECT *
FROM workingemployee
WHERE created_date > sysdate - INTERVAL '10' DAY;