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