我正在尝试将数字转换为字符表示。
我有一个名为salary的列,它存储一个值,例如400为员工1.我想用select查询显示员工1的工资。但是,如果薪水为200,则显示薪水为*
,如果薪水为400,则显示**
,如果薪水为600,则显示***
。
所以每个*
= 200
任何人都可以指导我如何做到这一点吗?
答案 0 :(得分:0)
如果选项数量有限(少于10个),您需要一个案例陈述 - https://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#operator_case。
如果你想要很多很多的星号,如果某人的薪水是10,000,你可以在rpad周围使用一点逻辑 - http://www.w3resource.com/mysql/string-functions/mysql-rpad-function.php。
答案 1 :(得分:0)
这是一个非常微不足道的问题。
你用mysql和sql-server标记了它;这些是具有不同语言变化的不同工具。下面的答案将适用于mysql,但可能需要对sql-server进行一些重构。
Select name
, concat(salary,rpad('',floor(salary/200),'*'))
From your table
...
答案 2 :(得分:0)
在MySQL中,您可以使用RPAD
SELECT RPAD('',FLOOR(salary/200), '*') AS stars
FROM table_name
在SQL Server中,您可以使用REPLICATE
;WITH C AS(
SELECT 200 AS salary
UNION ALL
SELECT 400 AS salary
UNION ALL
SELECT 600 AS salary
UNION ALL
SELECT 200 AS salary
UNION ALL
SELECT 200 AS salary
)
SELECT REPLICATE('*', salary/200) AS stars
,salary/200 AS salary
FROM C
输出
stars salary
* 1
** 2
*** 3
* 1
* 1
答案 3 :(得分:0)
SQL Server:
create table #tab (
name nvarchar(100),
salary int
)
insert #tab values ('Mrs. Garrett', 100), ('Mr. Drummond', 200),
('Kimberly', 300), ('Willis', 400),
('Arnold', 500), ('Tooty', 600),
('Natalie', 700)
select name,
salary,
replicate('*', floor(salary/200))
from #tab
drop table #tab
产生:
name salary (No column name)
Mrs. Garrett 100
Mr. Drummond 200 *
Kimberly 300 *
Willis 400 **
Arnold 500 **
Tooty 600 ***
Natalie 700 ***
或者,您可以将replicate()
替换为:
case
when salary >= 600 then '***'
when salary >= 400 then '**'
when salary >= 200 then '*'
else ''
end