I receive data from a client in a text format and then I have to convert it into date for MS SQL Server 2016 and Postgresql 12.
The dates can be in these formats:
30.12.2019 or 12.30.2019 or
30/12/2019 or 12/30/2019
Luckily, the same formatting applies for the whole field(column), however my query needs to determine which one of these it is.
I would like to apply a conditional clause (as CASE WHEN/IF) both in TSQL and POSTGRESQL. This is what I have so far:
TSQL:
SET DATEFORMAT mdy; UPDATE mytable SET
finaldate =CAST(TRY_CONVERT(varchar(255),RIGHT(mydate,4)+LEFT(mydate,2)+SUBSTRING(mydate,4,2))
AS DATE) WHERE mydate <> '00/00/0000' AND LEFT(mydate,2) < 13 AND
SUBSTRING(mydate,3,1) = '/';
SET DATEFORMAT dmy;
UPDATE mytable SET finaldate=CAST(TRY_CONVERT(varchar(255),RIGHT(mydate,4)+SUBSTRING(mydate,4,2)+LEFT(mydate,2)) AS DATE)
WHERE mydate <> '00.00.0000' AND SUBSTRING(mydate,4,2) < 13 AND SUBSTRING(mydate,3,1) = '.';
POSTGRESQL:
UPDATE my_table SET finaldate = TO_DATE(mydate, 'DD/MM/YYYY')
WHERE mydate <> '00/00/0000' AND CAST(LEFT(mydate,2) AS INTEGER) < 13 AND SUBSTRING(mydate,3,1) = '/';
UPDATE my_table SET finaldate = TO_DATE(mydate, 'DD.MM.YYYY')
WHERE mydate <> '00.00.0000' AND CAST(SUBSTRING(mydate,4,2) AS INTEGER) < 13 AND SUBSTRING(mydate,3,1) = '.';
However this cover only the scenarios for
30.12.2019 and 12/30/2019.
How can I use the condition if one of the numbers in the particular position is more than 13 then all the dates will be formatted.
Thank you!