Pass mm/dd/yyyy to yyyy-mm-dd date format - sql

I would like to know if there is a function or a simple way to pass the format date mm/dd/yyyy
For example: 11/01/2022 (November 1st 2022)
To this format yyyy-mm-dd
For example: 2022-11-01
Nowadays, I am slicing the date as a string, getting the day, month and year individually and put them together as I want, but I'd like to know if there is a better way to do it.

This can be done using PARSE which has the [USING culture] option:
PARSE ( string_value AS data_type [ USING culture ] )
In your example
SELECT PARSE('11/01/2022' AS datetime2 USING 'en-US');
Output:
2022-11-01
The above gives you date type which should be good for most tasks but if you need to get a string in a preferred format you can use FORMAT.
A. Culture specific output:
DECLARE #d DATE = PARSE('11/01/2022' AS datetime2 USING 'en-US');
SELECT FORMAT( #d, 'd', 'en-US' ) 'US English'
,FORMAT( #d, 'd', 'en-gb' ) 'British English'
,FORMAT( #d, 'd', 'en-au' ) 'Australian'
,FORMAT( #d, 'd', 'de-de' ) 'German'
,FORMAT( #d, 'd', 'zh-cn' ) 'Chinese Simplified (PRC)';
US English British English Australian German Chinese Simplified (PRC)
11/1/2022 01/11/2022 1/11/2022 01.11.2022 2022/11/1
(Please note some countries always use two digits for day and month and some don't)
B. Fixed format output:
DECLARE #d DATE = PARSE('11/01/2022' AS date USING 'en-US');
SELECT FORMAT( d, 'yyyy-MM-dd') 'yyyy-MM-dd';
2022-11-01

Assuming you're storing a date in a TEXT field? That is bad, but if that's indeed the case, the first step is to first parse it into a DATETIME object:
PARSE('11/01/2022' AS datetime USING 'en-US')
Now that it's in a DATETIME, use FORMAT() to format it to your desired format:
SELECT FORMAT( PARSE('11/01/2022' AS datetime USING 'en-US') , 'yyyy-MM-dd')
Returns:
2022-11-01

Related

hive string yymmdd to date type yyyymmdd

i have to convert this from string to date like this:
TO_CHAR(TO_DATE(SUBSTR(DATE_TIME,1,6),'YYMMDD'),'YYYYMMDD') as HI_DATE
I already try this format:
to_date(from_unixtime(UNIX_TIMESTAMP( substr(date_time,1,6), 'yyMMdd' ),'yyyy-MM-dd hh:mm:ss'))
but it returns NULL
What went wrong? How to make this correctly?
You cannot specify hh:mm:ss in to_date. If you want the time you should use to_timestamp.
to_date(
from_unixtime(
UNIX_TIMESTAMP(
substr(date_time, 1, 6),
'yyMMdd'
),
'yyyy-MM-dd'
)
)

sql date in mmddyy format in DB2

I have this simple query that is driving me crazy.
select current_date as "TODAY" from table
except that I need the date to be in mmddyy format. so If I run it today it would be 030918.
I am using DB2
If you want the date in a particular format, then convert it to a string, using to_char():
select to_char(current_date, 'MMDDYY') as "TODAY"
from table;
select replace (convert(varchar(10), GETDATE(), 1), '/', '')

Teradata: how to convert varchar value (format 'dd.mm.yyyy') to date (format 'yyyy-mm-dd' )?

how to convert varchar value, containing date in dd.mm.yyyy format, into date format 'yyyy-mm-dd' in WHERE clause in Teradata ?
Need to code something like this:
SELECT * from TABLE
WHERE <some operations with VARCHAR variable containing date> between '2015-06-01' and '2017-12-31'
You need to apply a format during the cast, either Teradata style:
WHERE CAST(str AS DATE FORMAT 'dd.mm.yyyy')
BETWEEN DATE '2015-06-01' AND DATE '2017-12-31'
or Oracle style:
WHERE TO_DATE(str, 'dd.mm.yyyy')
BETWEEN DATE '2015-06-01' AND DATE '2017-12-31'
Btw, I added DATE in front of the string, it's the recommended (and always reliable) way to write a date literal.

How to convert oracle to_timestamp to sql?

I want to convert Oracle
to_timestamp(coloum_name,'DD-MM-YYYY') to sql
required output : 24-APR-17 12.00.00.000000000 PM
I know this is old, but it has an very searchable title, and there's no accepted answer.
The TO_TIMESTAMP function converts text representations of dates to a standard date/time format. From your question, it sounds like you have dates stored as characters in the format 'DD-MM-YYYY', but you want SQL Server DATETIME2(7) (based on the number of decimals in the seconds) as your output. It also seems you want the default time to be noon, rather than midnight, since your sample output shows 12:00 PM, not AM.
Using CONVERT with style 103 will change the European styled date to a DATETIME2(7), as shown below. But then you'll need to do a DATEADD to move from midnight (which will be the default value) to noon, which is twelve hours later.
DECLARE #DateSample NVARCHAR(10) = '17-04-2017';
SELECT CONVERT( DATETIME2(7), #DateSample, 103 );
--Results
--2017-04-17 00:00:00.0000000
SELECT DATEADD( HOUR, 12, CONVERT( DATETIME2(7), #DateSample, 103 ));
--Results
--2017-04-17 12:00:00.0000000
The SQL Server default is 24 hour time, so if you absolutely must switch to AM/PM designators, you'll have to convert it back to a string, which seems to be the opposite of what you're trying to do.
This is a way to convert a date/timestamp into varchar2 in Oracle with the format you want
select to_char(yourColumn, 'DD-MON-YY HH.MI.SS.FF9 PM')
from yourTable
SELECT FORMAT(SYSDATETIME(), 'dd-MMM-yyyy h.mm.ss.fffffff tt')

How to assign current date with specific time to column?

How do i assign current date with a specific time?
let's say 8:00:00 AM to Column EXIT_DT of datatype datetime??
I have tried GETDATE() AS EXIT_DT but it gives me current datetime. I am using Sql server 2005. Any help?
Lets say Today is 1/3/2013 and i want my result to return as a datetime datatype with value 1/3/2013 8:00:00 AM. If i run the statement ytd, the result will be 1/2/2013 8:00:00 AM
This formula will always produce 08:00 for the day it is called, and avoids string manipulation:
select DATEADD(day,DATEDIFF(day,'20010101',GETDATE()),'2001-01-01T08:00:00')
Try to avoid solutions that convert to and from strings - treating datetime values as strings is one of the largest sources of bugs.
It works by computing the number of days (as an integer) that have elapsed since 1st January 2001. It then adds that same number of days to 08:00 on 1st January 2001.
You can try this :
DECLARE #dt datetime;
SET #dt=CONVERT(DateTime, CONVERT(VARCHAR,GETDATE(),101)+' 8:00:00')
SELECT CONVERT(VARCHAR, #dt, 101)+' '+ LTRIM(RIGHT(CONVERT(VARCHAR(20),#dt, 100), 7))
Visit http://www.sql-server-helper.com/tips/date-formats.aspx for datetime formats.
Use Convert along with getdate() to get specific formats.
ex:
SELECT CONVERT(VARCHAR(30),GETDATE(),113)
This is a bit stupid, but it works
select cast(cast(getdate() as date) as datetime) + '08:00:00'
it casts the getdate() to date thus losing the hours, than it casts it to datetime and adds 8 hours.
If you want to avoid implicit conversion of varchar to datetime, you could use this version:
select cast(cast(getdate() as date) as datetime)
+ convert(datetime,'08:00:00',114)
This is also working. (1). convert today's date to ISO format (yyyymmdd) (2). add the time, (3). convert back to datetime
Select convert(datetime, convert(varchar, getdate(),112) + ' ' + '8:00:00AM')
--Results
2013-01-03 08:00:00.000
If you need in specific format you need to convert back to varchar again.
-- AM/PM --
SELECT TO_CHAR(sysdate, 'MM/DD/YYYY HH:MI:SS AM') FROM dual
/
-- 24 hrs format --
SELECT TO_CHAR(sysdate, 'MM/DD/YYYY HH24:MI:SS') FROM dual
/