mysql - MariaDB 中是否有等同于 sprintf ('%+03d:00' , $my_number) 的东西?

标签 mysql timezone mariadb

我的目标是在 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 |

参见 demo

关于mysql - MariaDB 中是否有等同于 sprintf ('%+03d:00' , $my_number) 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55001158/

相关文章:

PHP-获取与 api 一起使用的单元格的值

javascript - 解析日期返回null

mysql - MariaDB 更新表 IF x null 然后更新 x 否则更新 y

c# - 如何获得与 MariaDB 5.5.6 链接的 Visual Studio Community 2017?

go - DB.Exec args 总是导致我的占位符出错

php - 如何使用此 id 编写此查询?

MySql 外键索引

mysql 更新 INSERT INTO 代码

ios - NSDate 更改时区

java - Maven 使用与系统不同的时区