[英]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.