如何检查下面的SQL
EMPLOYEE_NO = 0
,请将目标字段设置为空白EMPLOYEE_NO
以9990开头,请将目标字段设置为最后八位EMPLOYEE_NO
为6位数或更少,请在EMPLOYEE_NO
EMPLOYEE_NO
是7位数或更多,
一个。如果前7个后的数字为零,则将目标字段设置为2到7的位置
湾如果前7个后的数字不是零,则将目标字段设置为5到10的位置我只是写了像
这样的查询 SELECT CASE WHEN EMPLOYEE_NO = '9990%' THEN RIGHT(EMPLOYEE_NO,8)
CASE WHEN LENGTH(EMPLOYEE_NO) <=6 THEN PE_EMPLOYEE_NO
CASE WHEN LENGTH(EMPLOYEE_NO) >=7
但是如何为第4点和第5点编写查询。
答案 0 :(得分:2)
SELECT CASE WHEN EMPLOYEE_NO = '9990%' THEN RIGHT(EMPLOYEE_NO,8)
CASE WHEN LENGTH(EMPLOYEE_NO) <=6 THEN PE_EMPLOYEE_NO
CASE WHEN LENGTH(EMPLOYEE_NO) >=7 then case
when SUBSTRING(EMPLOYEE_NO,8,1)='0' then SUBSTRING(EMPLOYEE_NO,2,6)
else SUBSTRING(EMPLOYEE_NO,5,6) end
END Emp_CODE
答案 1 :(得分:1)
SELECT CASE WHEN EMPLOYEE_NO like '9990%' THEN RIGHT(EMPLOYEE_NO,8)
WHEN LENGTH(EMPLOYEE_NO) <=6 THEN PE_EMPLOYEE_NO
WHEN LENGTH(EMPLOYEE_NO) >=7 THEN
CASE WHEN SELECT MID(EMPLOYEE_NO ,7,LENGTH(EMPLOYEE_NO)) like '%0' then MID(EMPLOYEE_NO ,2,7) else MID(EMPLOYEE_NO ,5,10) end
end as Employee_ID from ....
答案 2 :(得分:0)
此问题被标记为Sql-Server和Oracle。根据Oracle或Sql Server,语法会有所不同,但这是一般的想法。
您需要为&gt;设置两个案例行。 7带有和包括在内。首先必须使用子字符串函数隔离第7个字符后的字符串。根据您的平台语法,可以评估此值是否包含全部0。
例如,如果我知道这些数据只包含数字,我会在tsql中编码:
CASE WHEN LENGTH(EMPLOYEE_NO) >=7 And Convert(Int, Substring(EMPLOYEE_NO, 8, Lenght(EMPLOYEE_NO) - 7)) = 0 Then...
CASE WHEN LENGTH(EMPLOYEE_NO) >=7 And Convert(Int, Substring(EMPLOYEE_NO, 8, Lenght(EMPLOYEE_NO) - 7)) > 0 Then...
答案 3 :(得分:0)
DECLARE @Emp TABLE (EMPLOYEE_NO VARCHAR(20))
INSERT INTO @Emp VALUES ('12345670000000'),('12345670004000')
SELECT CASE WHEN LEN(EMPLOYEE_NO) >=7 THEN
CASE WHEN PATINDEX('%[1-9]%',SUBSTRING (EMPLOYEE_NO,8,LEN(EMPLOYEE_NO)-7)) = 0
THEN SUBSTRING(EMPLOYEE_NO,2,5)
ELSE SUBSTRING(EMPLOYEE_NO,5,5)
END
END
FROM @Emp
对于此 - 如果前7个后面的数字是零 - 我使用PATINDEX来检查是否有任何0并且基于使用了SUBSTRING函数