PostgreSQL提取Build版本号时如何保留原小数位数?
问题:保留Build版本号的原始小数位数
我的build列包含以下条目:
4.4_sometext 4.9_sometext 4.11_sometext
我尝试了两种SQL提取方法:
第一种:
SELECT regexp_replace(build, '_.*$', '') AS build FROM tableX ORDER BY build
第二种:
SELECT SUBSTRING(build FOR POSITION('_' IN build) -1) AS build FROM tableX ORDER BY build
两种方法返回的结果却自动补了零:
4.40 4.90 4.11
提取的数字核心是对的,但单小数位的数值被右侧补零,改变了原始字符串格式。我需要保留原本的小数位数,请问该怎么做?
更新:我是在Grafana v9.4.7的柱状图中使用这些查询。
解决方案
这是因为Grafana自动把提取出的字符串识别成了数值类型,进而做了格式化补零。要保留原始字符串格式,有两种处理方向:
1. 在SQL层面强制返回字符串类型
针对不同数据库,写法略有不同:
- PostgreSQL:用
::text或者CAST强制转换-- 方法一:结合regexp_replace SELECT regexp_replace(build, '_.*$', '')::text AS build FROM tableX ORDER BY build-- 方法二:结合SUBSTRING SELECT CAST(SUBSTRING(build FOR POSITION('_' IN build) -1) AS text) AS build FROM tableX ORDER BY build - MySQL:用
CAST(... AS CHAR),也可以用SUBSTRING_INDEX简化提取逻辑SELECT CAST(SUBSTRING_INDEX(build, '_', 1) AS CHAR) AS build FROM tableX ORDER BY build
2. 在Grafana面板中调整字段显示格式
如果不想修改SQL,可以直接在Grafana里设置:
- 打开柱状图的「字段」设置面板
- 找到对应的
build字段,将格式从「数值」切换为「字符串」 - 保存设置后,就能看到保留原始小数位数的版本号了
内容的提问来源于stack exchange,提问作者hosselausso
相关产品推荐
相关产品推荐

