programing

MariaDB에 sprintf('%+03d:00', $my_number)에 해당하는 것이 있습니까?

oldcodes 2023. 8. 17. 21:52
반응형

MariaDB에 sprintf('%+03d:00', $my_number)에 해당하는 것이 있습니까?

SQL(MySQL 또는 MariaDB)에서 TimeZone을 숫자 형식에서 문자열(예: -10에서 "-10:00")로 변환하는 것이 목표입니다.

사실 저는 (PHP에서)와 동일한 것을 원합니다.

echo sprintf('%+03d:00', $timezone);
| In  | Out      |
|-----|----------|
| -10 | "-10:00" |
| -2  | "-02:00" |
| 2   | "+02:00" |
| 10  | "+10:00" |

SQL 구문으로 할 수 있는 방법이 있습니까?

저는 다음과 같은 글을 쓰기 시작했습니다.

SELECT CONCAT(CONVERT(timezone), CHAR), ":00");

그러나 출력은 예상과 다릅니다.

| In  | Out      |
|-----|----------|
| -10 | "-10:00" |
| -2  |  "-2:00" |
| 2   |   "2:00" |
| 10  |  "10:00" |

잘 부탁드립니다.

다음을 사용하여 MySQL/MariaDB 변환을 수행할 수 있습니다.

  (
     CONCAT(
        CASE
          # sign condition check
          WHEN (ABS(timezone) = timezone) = 0
          THEN "-"
          ELSE "+"
         END
      , LPAD(ABS(timezone), 2, '0')
      , ":00"
     )
   ) AS alias

테스트 데이터를 사용한 쿼리

SELECT
   timezone AS 'In'
 , (
     CONCAT(
        CASE
          # sign condition check
          WHEN (ABS(timezone) = timezone) = 0
          THEN "-"
          ELSE "+"
         END
      , LPAD(ABS(timezone), 2, '0')
      , ":00"
     )
   ) AS 'Out'

FROM (

SELECT -10 as timezone
UNION ALL
SELECT -2 AS timezone
UNION ALL
SELECT 2 AS timezone
UNION ALL
SELECT 10 AS timezone 

) AS test_data;

결과.

| In  | Out    |
| --- | ------ |
| -10 | -10:00 |
| -2  | -02:00 |
| 2   | +02:00 |
| 10  | +10:00 |

데모 보기

SELECT  dt + INTERVAL timezone HOUR;

추가할 예정timezone몇 시간 전에DATETIME dt아마timezone부호 있는 정수입니다.

언급URL : https://stackoverflow.com/questions/55001158/is-there-equivalent-to-sprintf03d00-my-number-in-mariadb

반응형