如何在使用select查询时将数字转换为mysql中的字符

时间:2015-04-01 22:02:43

标签: mysql sql sql-server

我正在尝试将数字转换为字符表示。

我有一个名为salary的列,它存储一个值,例如400为员工1.我想用select查询显示员工1的工资。但是,如果薪水为200,则显示薪水为*,如果薪水为400,则显示**,如果薪水为600,则显示***

所以每个* = 200

任何人都可以指导我如何做到这一点吗?

4 个答案:

答案 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