Учитывая, что JoinDate
является типом timestamp
, это должно быть хорошим обходным путем для вашей ситуации теперь, когда мы установили, что значения в JoinDate
типа timestamp
представляют временные метки UTC / GMT, а ваш сервер не в UTC / GMT. Идеальное решение - использовать столбцы timestamptz
.
Хитрость заключается в том, чтобы преобразовать JoinDate
в text
, добавить к нему z
, чтобы получилось UT C, а затем приведите его на timestamptz
. Как только это будет сделано, вы можете использовать at time zone 'us/chicago'
для преобразования за вас.
WITH RECURSIVE "child" AS (
SELECT "ConsultantDisplayID",
"JoinDate",
"ParentPersonDisplayID"
FROM "public"."flight_export_consultant"
WHERE "ConsultantDisplayID" = '4019'
UNION
SELECT c."ConsultantDisplayID",
"JoinDate",
c."ParentPersonDisplayID"
FROM "public"."flight_export_consultant" AS c
JOIN "child" AS cd
ON c."ParentPersonDisplayID" = cd."ConsultantDisplayID"),
"sponsor" AS (
SELECT
"child".*,
c1."ConsultantDisplayID",
c."JoinDate" as "Sponsor JoinDate"
FROM "public"."flight_export_consultant" AS c1
LEFT JOIN "child"
ON c1."ConsultantDisplayID" = "child"."ParentPersonDisplayID")
SELECT "ConsultantDisplayID",
("JoinDate"::text||'z')::timestamptz at 'america/chicago' as "JoinDate",
"ParentPersonDisplayID",
"ConsultantDisplayID",
("JoinDate"::text||'z')::timestamptz at 'america/chicago' as "Sponsor JoinDate"
FROM "sponsor";