Mysql 我怎样才能从号码中缩写出来?
这是我当前的表格:Mysql 我怎样才能从号码中缩写出来?,mysql,sql,Mysql,Sql,这是我当前的表格: // table +----+--------+------------+ | id | name | reputation | +----+--------+------------+ | 1 | jack | 534431 | | 2 | peter | 334 | | 3 | amos | 1300 | | 4 | carter | 13490 | | 5 | basil | 1351 |
// table
+----+--------+------------+
| id | name | reputation |
+----+--------+------------+
| 1 | jack | 534431 |
| 2 | peter | 334 |
| 3 | amos | 1300 |
| 4 | carter | 13490 |
| 5 | basil | 1351 |
+----+--------+------------+
我想将信誉
列的值更改为基于公斤的数字。事实上,我想把它缩短一些。stackoverflow就是这么做的。因此,预期输出如下所示:
// newtable
+----+--------+------------+
| id | name | reputation |
+----+--------+------------+
| 1 | jack | 534k |
| 2 | peter | 334 |
| 3 | amos | 1.3k |
| 4 | carter | 13.4k |
| 5 | basil | 1.3k |
+----+--------+------------+
SELECT id, name,
CASE WHEN value >= 1000 THEN
CONCAT(TRIM(TRAILING '.' FROM SUBSTR(TRUNCATE(number/1000, 1), 1, 4)), 'k')
ELSE value
END as reputation
FROM `table`
我该怎么做呢?您可以使用concat()
,case
,以及一些算法:
select id, name,
(case when reputation < 1000 then cast(reputation as char)
when reputation < 1000000 then concat(cast(floor(reputation/1000) as char), 'k')
when reputation < 1000000000 then concat(cast(floor(reputation/1000000) as char), 'M')
else 'Wow!!!'
end) as reputation
. . .
选择id、名称、,
(声誉<1000时的情况,然后施放(声誉为字符)
当声誉<1000000时,则concat(铸造(地板(声誉/1000)为字符),'k')
当声誉<100000000时,则concat(铸造(地板(声誉/1000000)为字符),'M')
还有“哇!!!”
(完)作为名誉
. . .
编辑:
要获取某些值的小数点,请执行以下操作:
select id, name,
(case when reputation < 1000 then format(reputation, 0)
when reputation < 100000 then concat(format(reputation/1000, 2), 'k')
when reputation < 1000000 then concat(format(reputation/1000, 0), 'k')
when reputation < 100000000 then concat(format(reputation/1000000, 1), 'M')
when reputation < 1000000000 then concat(format(reputation/1000000, 0), 'M')
else 'Wow!!!'
end) as reputation
. . .
选择id、名称、,
(声誉<1000时的情况,然后格式(声誉,0)
当声誉<100000时,则为concat(格式(声誉/1000,2),“k”)
当声誉<1000000时,则使用concat(格式(声誉/1000,0),“k”)
当声誉<100000000时,则使用concat(格式(声誉/1000000,1),“M”)
当声誉<100000000时,则为concat(格式(声誉/1000000,0),“M”)
还有“哇!!!”
(完)作为名誉
. . .
是一个SQL提琴。我可以在以下情况下使用
大小写:
// newtable
+----+--------+------------+
| id | name | reputation |
+----+--------+------------+
| 1 | jack | 534k |
| 2 | peter | 334 |
| 3 | amos | 1.3k |
| 4 | carter | 13.4k |
| 5 | basil | 1.3k |
+----+--------+------------+
SELECT id, name,
CASE WHEN value >= 1000 THEN
CONCAT(TRIM(TRAILING '.' FROM SUBSTR(TRUNCATE(number/1000, 1), 1, 4)), 'k')
ELSE value
END as reputation
FROM `table`
使用case/whenblock@Drew你不能在你的桌子里这样做,这是极不有效的。相反,您存储数值,并且仅动态地“转换”它以进行可视化。根据访问数据时使用的脚本语言,有相应的库。@arkascha我不想将它们存储为kilo,我想在选择行时将其转换。您必须使用case构造。不管您使用的是脚本语言还是sql。但是,您可以将该逻辑放入sql中的存储过程中,并在SELECT
query期间将其用作函数。是的,您有一个自我回答,+1而且您的解决方案不支持这样的浮点结果1.3k
@MartinAJ。答案已经确定。我认为format()
是最好的函数。