How to change the default timezone in Amazon Redshift? - sql

Setting a timestamp column to SYSDATE by default, stores it as UTC. Is it possible to change the timezone so SYSDATE stores dates and times to a different timezone?
So far, I've checked the SET command but I'm not sure if it is possible to use it to change the timezone.

Basically, the answer is no. According to the documentation:
TIMESTAMP values are UTC, not local time, in both user tables and
Amazon Redshift system tables.
Note Timestamps with time zones are not supported.
If you need the queries to return data in different timezone, you can use the CONVERT_TIMEZONE function, with either constant timezone value (or query parameter), or joining the result to a configuration table which contains the required timezone.

Related

What is the ideal way to store a timezones aware in a PostgreSQL database?

I want to store datetime strings in my SQL database. And some of these may be timezone-aware. I have 3 ways of storing them:
Storing them as a string without timezone, such as '1995-01-13 12:41:04.231132', and storing the timezone offset '+0000' in a separate column.
Storing them as a string without timezone, such as '1995-01-13 12:41:04.231132', and storing the timezone name 'Africa/Cairo' in a separate column.
Storing the entire thing as a string: '1995-01-13 12:41:04.231132+0000', with the offset attached.
What would be the ideal way to do this?
Note: I am using PostgreSQL database.
Extra details: I am in fact storing these datetimes in a JSONB column in my PostgreSQL database, so during queries and ordering, I need to cast these using the appropriate data type.
None of the above, use a timestamp with time zone data type. It can handle timezone info as either an offset, timezone name, or abbreviation.

bigquery converting the string datetime with timezone

A table with terabytes of data in bigquery got multiple columns set as string format but actually they contain datetime strings like
2016-10-24 15:00:00
I tried answer from this link to convert (CAST) the fields into timestamp format as below
SELECT
CAST( MURDER_DATE AS TIMESTAMP) AS CONVERTED_MURDER_DATE, *
FROM `death_list`;
That works but it converts all strings into timestamps with UTC timezone as below
2007-03-23 15:00:00.000 UTC
I need the data in a different timezone. Any clue?
Try using
DATETIME(CAST( MURDER_DATE AS TIMESTAMP), "Australia/Sydney"))
To my view, it seems to be a current limitation of BigQuery:
Timestamp type is always stored in UTC format. And you have no way to add any "timezone" information to it.
Datetime type nor stores any information about the timezone. You could still have a internal convention in your team/company that says that all the Datetime columns are stored in your local timezone, but I personally find it very awkward.
What we've decided so far in our company is to store everything in Timestamp (thus UTC format), and we never use Datetime due to lack of precision regarding the time zone. Then, if a client wants to get the information in another timezone, it has to do the conversion itself when reading the data.

Is there any way to get only "-04" or the difference value based on whatever time zone is added in a query?

Is there any way to get only "-04" or the difference value based on whatever time zone is added in a query?
select convert(datetime,GETDATE()) at time zone 'Eastern Standard Time'
Result: 2017-09-12 17:49:18.377 -04:00
if you are using sql server you can do this one of two ways depending on the data you want
datepart(tz,SYSDATETIMEOFFSET()) or datename(tz,SYSDATETIMEOFFSET()).
if you take a look at these functions you will notice they require offsets. GETDATE() does not return the correct type.
you will have to use SYSDATETIMEOFFSET() instead.
for more information on this please read this

How to insert datetime with timezone to SQLite?

I know that to insert a datetime this format yyyy-mm-dd hh:mm:ss should be used.
However my dataset has a timestamp field that looks like yyyy-mm-dd hh:mm:ss +/-0X:00, where X can take many values and is different from my computer's local timezone.
What is the best way to insert a datetime field with such timezone information to SQLite?
SQLite's built-in date and time functions understand the timezone specification in these strings, but with different timezones, any other operations on these strings (even searches and comparisons) will not work correctly.
If you want to handle time zones, you have to either
convert all timestamps to one specific time zone (UTC), so that you can use them for sorting and searching; or
leave the time zone information in there, but do all searching, sorting and other computations not in SQL but in your application.

SQLite and inserting the current date in UTC format

How do I use an SQL statement on an sqllite database to insert the current date in UTC. I found the NOW function but what format is that in? This will be on mobile devices so everyone will have a different locale, however, I need a standard time format because the device will compare the dates with my server.
Also, is there a way to automatically update a 'modified' field when the data in the row is changed like you can in MySQL?
SELECT DATETIME('now') returns the current UTC datetime. See Date And Time Functions. You can use DATETIME DEFAULT CURRENT_TIMESTAMP with column declaration.
Format 11, the string 'now', is
converted into the current date and
time as obtained from the xCurrentTime
method of the sqlite3_vfs object in
use. Universal Coordinated Time (UTC)
is used
For the 'modified' field you can use a trigger.
You don't specify what you use to develop your application on. I prefer using QDate::toJulianDay and QDate::fromJulianDay in Qt to store dates in an SQLite database as an integer if I only need to store the date.