首页 > 解决方案 > 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" |

提前致谢。

标签: mysqltimezonemariadb

解决方案


您可以使用 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 |

演示


推荐阅读