Postgresql date inconsistent format - postgresql

I am building an app using node with a Postgres backend. I have a column for date where the data type is date. The dates in the database are stored in the format YYYY-MM-DD. However, when I do a query in my app, the date returned is in the format YYYY-MM-DD + (time zone information). For example:
2016-01-06T05:00:00.000Z
Does anyone know how I can prevent this?
Thanks in advance!

Use to_char
SELECT to_char(dateColumn, 'YYYY-MM-DD') AS formattedDate FROM ...
Example:
ubuntu=> SELECT to_char(to_timestamp('2016-01-07', 'YYYY-MM-DD'), 'YYYY-MM-DD');
to_char
------------
2016-01-07
(1 row)

Related

How to extract Year and Month in SQL Postgres by using Data_Part function

I am facing an issue extracting the month and year from the data (in Character varying type) >> InvoiceDate in SQL Postgres. I have seen the solution is relatively easy with MySQL function: DATEFROMPARTS as per the below Code which is not available in SQLpostgres. How can I get the same result DATA_PART function in Postgres SQL, but simultaneously I need to change the data type of the column "InvoiceDate" to the date
Select
CustomerID,
min(InvoiceDate) first_purchase_date,
DATEFROMPARTS(year(min(InvoiceDate)), month(min(InvoiceDate)), 1) Cohort_Date
into #cohort
from #online_retail_main
group by CustomerID
The output:
Customer ID| first_purchase_date |Cohort_Date|
-----------+-------------------------+-----------+
12345 | 2010-12-20 15:47:00:00 | 2010-12-01|
I am trying to make a date consits of Year and Month , while the day to be set as 1 for all
Assuming a valid Postgres timestamp:
select date_trunc('month', '2010-12-20 15:47:00.00'::timestamp)::date;
date_trunc
------------
12/01/2010
--or ISO format
set datestyle = 'ISO,MDY';
select date_trunc('month', '2010-12-20 15:47:00.00'::timestamp)::date;
date_trunc
------------
2010-12-01
Uses date_trunc to truncate the timestamp to a month which means the first of the month. Then cast(::date) to a date type. The DateStyle just deals with how the value is presented to the user. The value is not stored formatted.
To do something similar to what you did in MySQL:
select make_date(extract(year from '2010-12-20 15:47:00.00'::timestamp)::integer, extract(month from '2010-12-20 15:47:00.00'::timestamp)::integer, 1);
This uses make_date from here Date/time functions and extract to build a date.

Converting varchar to date in postgresql (date_parse doesn't work)

Running this existing query in presto:
date(date_parse(activation_date, '%%m-%%d-%%Y')) from table1
gives the error
"Invalid format: "02/06/2022""
Activation_date is varchar, showing MM/DD/YYYY
How do I convert it to a date so that I can join it to a column that is already in postgresql date type? Thank you so much!
The expected format is %m/%d/%Y in Trino (formerly PrestoSQL).
trino> SELECT date(date_parse('02/06/2022', '%m/%d/%Y'));
_col0
------------
2022-02-06
https://trino.io/docs/current/functions/datetime.html?highlight=date_parse#mysql-date-functions
date_parse is not a Postgres function.
You don't need to escape % in Postgres strings.
Your format has - while your string has /.
If your DateStyle is set to MDY (Month Day Year), simply cast the string to a date.
# SELECT current_setting('datestyle');
current_setting
-----------------
ISO, MDY
# select '02/06/2022'::date;
date
------------
2022-02-06
See Date/Time Input for more.

How to create 'Week column' based on another date column?

I have column 'jobstarttimeiso' and I want to create another column for Weeks of the year based on the date. How would I go about doing that? I am using Redash to query from redshift database. Please help! Thank you.
The extract function will return a week number e.g.
select extract(week from jobstarttimeiso) as weeknumber
In general:
EXTRACT ( datepart FROM { TIMESTAMP 'literal' | timestamp } )
See: https://docs.aws.amazon.com/redshift/latest/dg/r_EXTRACT_function.html
alternatively you can also use to_char()
TO_CHAR (timestamp_expression | numeric_expression , 'format')
with the parameter IYYY as the format for ISO 8601 week-numbering year (4 or more digits)

How to change a date format in postgres?

I am trying to convert a character varying date field to the format YYYYMMDD and below is the select query I tried. The output format is 1999-04-27 (YYYY-MM-DD). Admindate is the field name in the table.
select to_date( admindate,'MMDDYYYY') from test;
Can someone please advice what I am doing wrong?
Use to_char to convert the converted date into the desired format.
select to_char(to_date(admindate, 'MMDDYYYY'), 'YYYYMMDD')
from test;
you can try this
SELECT TO_CHAR(NOW() :: DATE, 'dd/mm/yyyy');

how to convert 12 hours timestamp format to 24 hours timestamp format in postgres?

how to convert 12 hours timestamp format to 24 hours timestamp format in postgres? like '2016-07-01 01:12:22 PM' to '2016-07-01 13:12:22'
Using PostgreSQL:
To convert 24 hours to 12 hours:
select to_char( to_timestamp ( '13:00:00', 'HH24:MI:SS' ) , 'HH12:MI:SS PM' )
from emp_table;
To convert 12 hours to 24 hours:
select to_char( to_timestamp ( '11:00:00' , 'HH12:MI:SS' ) , 'HH24:MI:SS AM' )
from emp_table;
Values in a timestamp (or date, time, integer or any type non-character type) are not stored in any specific format.
Any format you see is applied by the application you are using to display the values - typically the SQL client you are using.
There are two ways to change that:
Configure your SQL client to use a different timestamp format for display (how you do that depends on the SQL client you are using - check its manual)
Use the the_char() function to format your timestamp value throug SQL
select to_char(the_column, 'yyyy-mm-dd hh24:mi:ss')
from the_table
More details on the available formats can be found in the manual: https://www.postgresql.org/docs/current/static/functions-formatting.html#FUNCTIONS-FORMATTING-DATETIME-TABLE
Easily, just cast it like follows:
SELECT '2016-07-01 01:12:22 PM'::timestamp;
timestamp
---------------------
2016-07-01 13:12:22
(1 row)