【问题标题】:how to convert numbers to character in mysql while using select query如何在使用选择查询时将数字转换为mysql中的字符
【发布时间】:2015-04-08 08:49:36
【问题描述】:

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

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

所以每个* = 200

谁能指导我如何做到这一点?

【问题讨论】:

  • 请去掉sql-server标签——sql-server和mysql不一样
  • 250 的情况如何?
  • 250 只显示两颗星

标签: mysql sql sql-server


【解决方案1】:

如果选项数量有限(可能少于 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。

【讨论】:

    【解决方案2】:

    这是一个非常琐碎的问题。

    你已经用 mysql 和 sql-server 标记了它;这些是具有不同语言变体的不同工具。下面的答案将适用于 mysql,但可能需要对 sql-server 进行一些重构。

    Select name
    , concat(salary,rpad('',floor(salary/200),'*'))
    From your table
    ...
    

    【讨论】:

    • 嗨,您的答案几乎与我的问题很接近,我只想再显示 1 件事,我只想显示星 * 而不是整数意味着薪水 100 显示 *** 而不是显示 100 ***
    【解决方案3】:

    SQL 服务器:

    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
    

    【讨论】:

    • 如何在 mysql 中执行此操作,我想为 200 而不是 200* 生成 *,如 **** 为 800 而不是 800****
    • 这样做...我也在选择薪水,以便您查看。我的结果中有三列。如果您不想要它,只需从我的选择语句中删除“薪水”行。
    【解决方案4】:

    在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 2020-12-16
      相关资源
      最近更新 更多