programing

MariaDB 이달의 첫째 날 찾기 및 UTC로 변환

bestprogram 2023. 8. 30. 21:51

MariaDB 이달의 첫째 날 찾기 및 UTC로 변환

MariaDB를 사용하고 있으며 기록은 모두 UTC에 저장되어 있지만 현지 시간대를 기준으로 지난 12개월 이내의 기록을 찾을 수 있기를 원합니다.

제가 취한 조치는 다음과 같습니다.

SELECT
    CURRENT_TIMESTAMP() AS Current_Date_And_Time_In_UTC,
    CONVERT_TZ(CURRENT_TIMESTAMP(),'UTC','Pacific/Auckland') AS Current_Date_And_Time_In_Auckland,
    DATE(CONVERT_TZ(CURRENT_TIMESTAMP(),'UTC','Pacific/Auckland')) AS Date_In_Auckland,
    LAST_DAY(DATE(CONVERT_TZ(CURRENT_TIMESTAMP(),'UTC','Pacific/Auckland')) - INTERVAL 1 MONTH) AS Last_Day_Previous_Month_In_Auckland,
    LAST_DAY(DATE(CONVERT_TZ(CURRENT_TIMESTAMP(),'UTC','Pacific/Auckland')) - INTERVAL 1 MONTH) + INTERVAL 1 DAY AS First_Day_Current_Month_In_Auckland,
    TIMESTAMP(LAST_DAY(DATE(CONVERT_TZ(CURRENT_TIMESTAMP(),'UTC','Pacific/Auckland')) - INTERVAL 1 MONTH) + INTERVAL 1 DAY, MAKETIME(0,0,0)) AS First_Day_At_Midnight_Current_Month_In_Auckland,
    CONVERT_TZ(TIMESTAMP(LAST_DAY(DATE(CONVERT_TZ(CURRENT_TIMESTAMP(),'UTC','Pacific/Auckland')) - INTERVAL 1 MONTH) + INTERVAL 1 DAY, MAKETIME(0,0,0)), 'Pacific/Auckland','UTC') AS First_Day_At_Midnight_Current_Month_In_UTC

이를 통해 이 기능을 사용할 수 있게 되었습니다.

SELECT
    CONVERT_TZ(TIMESTAMP(LAST_DAY(DATE(CONVERT_TZ(CURRENT_TIMESTAMP(),'UTC','Pacific/Auckland')) - INTERVAL 13 MONTH) + INTERVAL 1 DAY, MAKETIME(0,0,0)), 'Pacific/Auckland','UTC') AS Start_DateTime_In_UTC,
    CONVERT_TZ(TIMESTAMP(LAST_DAY(DATE(CONVERT_TZ(CURRENT_TIMESTAMP(),'UTC','Pacific/Auckland')) - INTERVAL 1 MONTH) + INTERVAL 1 DAY, MAKETIME(0,0,0)), 'Pacific/Auckland','UTC') AS End_DateTime_In_UTC

같은 결과를 얻을 수 있는 더 간단한 방법이 있습니까?

의 열이 있는 경우timestamp데이터 유형의 경우 오프셋이 전혀 필요하지 않습니다.

설명서에는 다음이 명시되어 있습니다.

열이 다음을 사용하는 경우TIMESTAMP데이터 유형을 선택하면 삽입된 값이 저장될 때 세션의 표준 시간대에서 UTC(조정된 범용 시간)로 변환되고 검색될 때 세션의 표준 시간대로 다시 변환됩니다.

세션의 표준 시간대가 로컬 표준 시간대로 설정되어 있다고 가정하면 지난 12개월을 기준으로 열을 필터링하는 작업은 다음과 같이 간단합니다.

where myts >= date_format(current_date, '%Y-%m-01') - interval 12 month
  and myts <  date_format(current_date, '%Y-%m-01')

언급URL : https://stackoverflow.com/questions/63984703/mariadb-find-the-first-day-of-the-month-and-convert-to-utc