我从客户端以文本格式接收数据,然后必须将其转换为 MS SQL Server 2016 和 Postgresql 12 的日期。
日期可以采用以下格式:
30.12.2019 或 12.30.2019 或
2019 年 12 月 30 日或 2019 年 12 月 30 日
幸运的是,相同的格式适用于整个字段(列),但是我的查询需要确定它是其中的哪一个。
我想在 TSQL 和 POSTGRESQL 中应用条件子句(如 CASE WHEN/IF)。这是我到目前为止所拥有的:
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) = '.';
但是,这仅涵盖以下场景
2019 年 12 月 30 日和 2019 年 12 月 30 日。
如果特定位置的数字之一超过 13,那么如何使用条件,那么所有日期都将被格式化。
谢谢!