mysql - 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 |
看演示
推荐阅读
- python - 从字符串两个列表中获取所有组合
- java - 如何设置 dirContextValidator?
- angular - 预先填写信用卡的 PayPal 账单详细信息
- javascript - 数据库信息嵌入 discord.js
- unreal-engine4 - 虚幻引擎音效
- python - Pyinstaller 解压丢失的 cookie
- matlab - For循环为MATLAB中的偶数索引给出错误的矩阵
- typescript - 打字稿:获取类型的第一个属性的类型
- linux - 循环遍历 bashscript 中的文件名 - 需要在每次循环第 n 次迭代时使用 n+1 更新文件中的一行文本,但循环序列会导致问题
- python - 如何使用 for 循环和一块板正确地使该程序在列表中提供正确的输出和移位元素