SQL查询员工ID

时间:2019-03-12 23:57:47

标签: mysql sql

我有一个表,其中包含employee_id中的值,这些值的长度为5、6或8位数字。我父母报告员工编号为8位数字。

如果是5位数字,我要添加100,如果是6位数字,则要添加10,如果8位数字没有变化。

如何在SQL中编写查询以使所有员工ID都为8位?

这是我的代码:

case 
    when length(`Employee ID`)=6 then RIGHT(CONCAT("10" , `Employee ID`), 8) AS `Employee ID`
    when length(`Employee ID`)=5 then RIGHT(CONCAT("100" , `Employee ID`), 8) AS `Employee ID`
    else length(`Employee ID`)=8
END

但是没有运气。失败了。

谢谢。

2 个答案:

答案 0 :(得分:2)

假设employee_id是数字,我会这样做:

SELECT employee_id, 
    CASE 
        WHEN employee_id >= 10000000
        THEN employee_id
        ELSE employee_id + 10000000
    END new_employee_id
FROM t

Demo on DB Fiddle

| employee_id | new_employee_id |
| ----------- | --------------- |
| 12345678    | 12345678        |
| 123456      | 10123456        |
| 12345       | 10012345        |

答案 1 :(得分:0)

case 
when length(`Employee ID`)=6 then RIGHT(CONCAT("10" , `Employee ID`), 8) AS `Employee ID`
when length(`Employee ID`)=5 then RIGHT(CONCAT("100" , `Employee ID`), 8) AS `Employee ID`
else length(`Employee ID`)=8 END

我已经做了很多这样的查询,并且也使用了IF。因此,我发现了一些错误。据我所知,您无需在RIGHT中指定CONCAT。而且,您无需定义每个WHEN ... THEN .. AS,而是在AS之后定义END。加上我上面的评论,最后一部分也是不正确的。在下面尝试以下查询,看看是否能获得所需的结果:

CASE
WHEN LENGTH(`Employee ID`)=6 THEN CONCAT("10" , `Employee ID`)
WHEN LENGTH(`Employee ID`)=5 THEN CONCAT("100" , `Employee ID`)
ELSE `Employee ID` END AS `Employee ID`;