我有一个表,其中包含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
但是没有运气。失败了。
谢谢。
答案 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
| 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`;