如何在前7位数后找到零

时间:2016-05-17 21:46:04

标签: sql sql-server oracle

如何检查下面的SQL

  1. 如果EMPLOYEE_NO = 0,请将目标字段设置为空白
  2. 如果EMPLOYEE_NO以9990开头,请将目标字段设置为最后八位
  3. 如果EMPLOYEE_NO为6位数或更少,请在EMPLOYEE_NO
  4. 中设置目标字段以完成值
  5. 如果EMPLOYEE_NO是7位数或更多, 一个。如果前7个后的数字为零,则将目标字段设置为2到7的位置 湾如果前7个后的数字不是零,则将目标字段设置为5到10的位置
  6. 我只是写了像

    这样的查询
      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点编写查询。

4 个答案:

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