2017-06-15 85 views
0

以下Hello是代码(SQL新手)。我需要修剪'Key_2并创建名为Project_Code的新列。我如何使用len并留在这个新的“Project_Code”列上。它看起来像代码将在原始列“Key_2”SQL长度,左侧,右侧新列

select 
    KEY_1, 
    KEY_2, 
    Replace (KEY_2, '&','') as Project_Code, 
    FIELD_NAME, 
    AUDIT_OLD_VALUE, 
    AUDIT_NEW_VALUE 

FROM TBADT_AUDIT_TRAIL 

Case 
    If 
    Len (Project_Code) <= 4 
    then 
    Left (Project_Code, 4) as Proj_Code 
    else 
    Right (Project_Code, 2) as Proj_Phase 

    End If 

where Key_1 like 'WKSCHART' 
and 
Audit_Date between '2017-06-13' and '2017-06-14' 
+0

什么数据库平台?请标记。 – OldProgrammer

+0

为什么在FROM之后有一个case语句? – maSTAShuFu

回答

0

我认为这只是工作是你想什么来实现
使用IIF否则情况下,如果新的密钥2的长度超过4则有一个项目阶段,否则将只是一个项目代码?

SELECT 
    KEY_1, 
    KEY_2, 
    IIF(LEN(REPLACE(KEY_2, '&', '')) <= 4, LEFT(REPLACE(KEY_2, '&', ''), 4), '') Project_code, 
    IIF(LEN(REPLACE(KEY_2, '&', '')) > 4, RIGHT(REPLACE(KEY_2, '&', ''), 2), '') Project_Phase, 
    FIELD_NAME, 
    AUDIT_OLD_VALUE, 
    AUDIT_NEW_VALUE 
FROM TBADT_AUDIT_TRAIL 
WHERE Key_1 LIKE 'WKSCHART' 
AND Audit_Date BETWEEN '2017-06-13' AND '2017-06-14' 

或项目代号为左4和项目一期工程是右2

SELECT 
    KEY_1, 
    KEY_2, 
    LEFT(REPLACE(KEY_2, '&', ''), 4) Project_code, 
    RIGHT(REPLACE(KEY_2, '&', ''), 2) Project_Phase, 
    FIELD_NAME, 
    AUDIT_OLD_VALUE, 
    AUDIT_NEW_VALUE 
FROM TBADT_AUDIT_TRAIL 
WHERE Key_1 LIKE 'WKSCHART' 
AND Audit_Date BETWEEN '2017-06-13' AND '2017-06-14' 
+0

第一个更好,但方括号存在问题。我修好了,但它仍然不起作用? – Newbee

+0

什么不行? – maSTAShuFu

+0

查询出现错误 – Newbee