簡體   English   中英

SAP HANA:如何使用 CAST 將 VARCHAR 數據類型更改為 INTEGER。 此 CAST 在 CASE function 中實現

[英]SAP HANA: How to change VARCHAR data type into INTEGER by using CAST. This CAST is implemented inside a CASE function

我有一個名為 USER_SETUP 表的表。 該表有一個名為“EMPLOYEE_ID”的列。 此列為 VARCHAR(45)。 我無法執行 ALTER 命令將表數據類型從 VARCHAR 修改為 Integer。所以我想執行 CAST。 問題是我想將數據類型從 VARCHAR 轉換為 Integer 並使用 CASE function 過濾數據類型。

需要正確的 SQL SYNTAX 來執行 QUERY。我要執行的 SQL 命令如下:

SAP HANA SQL 查詢:

SELECT  od.OFFICE_NAME, 
    CASE 
        WHEN (us.USER_TYPE) LIKE  'D' THEN 'Doctor'
        WHEN (us.USER_TYPE) LIKE  'O' THEN 'Others'
        WHEN (us.USER_TYPE) LIKE  'RG'THEN 'Radiographer Technician'
        WHEN (us.USER_TYPE) LIKE  'N' THEN 'Nurse'
        WHEN (us.USER_TYPE) LIKE  'RD'THEN 'Radiographer Technologist'
        WHEN (us.USER_TYPE) LIKE  'A' THEN 'Administrator'
        ELSE 'Undefined'
        END AS "Category",
    CASE 
        WHEN CAST(us."EMPLOYEE_ID" AS INTEGER CS_INT)>50000 THEN 'Non-Kuwaiti'
        WHEN CAST(us."EMPLOYEE_ID" AS INTEGER CS_INT)<50000 THEN 'Kuwaiti'
        ELSE 'Undefinded'
        END AS "Kuwaiti/Non-Kuwaiti",
    count(us.USER_ID)
FROM USERS_DEPARTMENTS ud
INNER JOIN USER_SETUP us 
on(ud.USER_ID=us.USER_ID)
INNER JOIN DEPARTMENT_OFFICE do 
on(ud.DEPARTMENT_ID=do.DEPARTMENT_ID)
INNER JOIN OFFICE_DETAILS od 
ON (do.OFFICE_ID=od.OFFICE_ID)
WHERE  do.DEPARTMENT_ID 
IN
(
SELECT do1.DEPARTMENT_ID 
FROM DEPARTMENT_OFFICE do1 
INNER JOIN OFFICE_DETAILS od1 
ON (do1.OFFICE_ID=od1.OFFICE_ID)
AND od1.ACTIVE_STATUS ='Y'
)
AND us.USER_LABEL NOT  in('Emergency Room','General Doctor','General Doctor Oph')
AND us.ACTIVE_STATUS LIKE 'Y'
AND SUBSTR(us.ACTIVE_DATE,1,10) 
BETWEEN '2019-10-01' AND '2023-12-31'
GROUP BY od.OFFICE_NAME,us.USER_TYPE,us.EMPLOYEE_ID
ORDER BY od.OFFICE_NAME,us.USER_TYPE;

根據代碼有 4 列,第三列正在創建問題:

 CASE 
    WHEN CAST(us."EMPLOYEE_ID" AS INTEGER CS_INT)>50000 THEN 'Non-Kuwaiti'
    WHEN CAST(us."EMPLOYEE_ID" AS INTEGER CS_INT)<50000 THEN 'Kuwaiti'
    ELSE 'Undefinded'
    END AS "Kuwaiti/Non-Kuwaiti",
        

我能夠通過創建一個 VIEW 來解決這個問題

CREATE VIEW ECLINIC_KNG.VIEW_USER_SETUP AS
SELECT
USER_ID,
EMPLOYEE_ID,
CASE 
WHEN EMPLOYEE_ID < 50000 THEN 'Kuwaiti'
WHEN EMPLOYEE_ID >= 50000 AND LENGTH(EMPLOYEE_ID) <=6 THEN 'Non-Kuwaiti'
ELSE 'NOT KNG'
END AS "KWT_NKWT",
CASE 
WHEN LENGTH(EMPLOYEE_ID) <=6 THEN 'KNG'
WHEN LENGTH(EMPLOYEE_ID)=12 THEN 'MOH'
ELSE 'Undefined'
END AS "KNG_MOH",
USER_NAME,
ACTIVE_DATE,
DEACTIVE_DATE,
ACTIVE_STATUS,
USER_CODE,
USER_LABEL,
USER_PASSWORD,
USER_TYPE,
OFFICE_ID,
USER_DESIG,
USER_LICENSE,
USER_SIGN,
CLIMIT_DAYS,
EDIT_BILL_SERVICE,
PASSWORDGROUP_ID,
USERLABEL_AR,
DISCOUNT_APPROVAL,
DISCOUNT_TYPE,
DISCOUNT_MAX,
BILL_CANCELLATION,
BILL_CANCELLATION_DAYS,
DOCTOR_ID
FROM 
  (SELECT 
  "USER_ID",
 --TO_INTEGER("EMPLOYEE_ID") AS "EMPLOYEE_ID" ,
  TO_DECIMAL("EMPLOYEE_ID",12,0) AS "EMPLOYEE_ID",
 "USER_NAME",
 "ACTIVE_DATE",
 "DEACTIVE_DATE",
 "ACTIVE_STATUS",
 "USER_CODE",
 "USER_LABEL",
 "USER_PASSWORD",
 "USER_TYPE",
 "OFFICE_ID",
 "USER_DESIG",
 "USER_LICENSE",
 "USER_SIGN",
 "CLIMIT_DAYS",
 "EDIT_BILL_SERVICE",
 "PASSWORDGROUP_ID",
 "USERLABEL_AR",
 "DISCOUNT_APPROVAL",
 "DISCOUNT_TYPE",
 "DISCOUNT_MAX",
 "BILL_CANCELLATION",
 "BILL_CANCELLATION_DAYS",
 "DOCTOR_ID"
  FROM
   "ECLINIC_KNG"."USER_SETUP"
 WHERE
   "USER_SETUP"."EMPLOYEE_ID" not in ('undefined', '299450','34(NEW RECRUIT)', 
   'army', 'MOH Nurse','NEW RECRUITMENT 380','1111111','0')
 AND 
    "USER_SETUP"."EMPLOYEE_ID" LIKE_REGEXPR '[0-9]' 
ORDER BY
   "USER_ID")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM