使用東華醫為HIS系統的用戶都知道,Cache數據庫中對于日期的存儲為幾萬的數字,比如,今天就是相對于1841年1月1日的第多少萬天,以這種形式進行表示;對于時間,也是以數字形式存儲,比如,當前時間是一天中的第多少秒,就存儲多少。
這種形式存儲,當想用SQL語句取值且要將日期表示成yyyy-MM-dd HH-mm-ss這種格式時,就比較困難,因為當使用SqlDb.exe取值是,能將單獨的日期轉換成yyyy-MM-dd 00:00:00的形式,時間能轉換成HH-mm-ss,但使用“||”拼接到一起時,就不會按照yyyy-MM-dd HH-mm-ss顯示,以下介紹有效的轉換方法,供大家參考:
1、當日期是和時間都是數字形式時,即“67021,55291”
select
case when b.ANA_SurgFinishTime is not null then left(DateAdd(day,b.ANA_Date,"1840-12-31"),10)||' '||RIGHT("00"||CAST(FLOOR(b.ANA_SurgFinishTime/3600) AS VARCHAR(4)),2)
||":"||RIGHT("00"||CAST(FLOOR((b.ANA_SurgFinishTime-(FLOOR(b.ANA_SurgFinishTime/3600)*3600))/60) AS VARCHAR(4)),2)
||":"||RIGHT("00"||CAST(b.ANA_SurgFinishTime-(FLOOR(b.ANA_SurgFinishTime/60)*60) AS VARCHAR(4)),2)else null end as 手術結束日期from OR_Anaesthesia b
2、東華系統在檢驗系統中又將日期存儲成“20240624”這種形式,又該如何轉換呢?
SELECT a.SurName AS 姓名,a.IDNumber AS 身份證號碼,c.TextRes AS 結果,
CAST(RIGHT("0000"||CAST(FLOOR(LEFT(b.AuthDate,4)) AS VARCHAR(4)),4)
||"-"||RIGHT("00"||CAST(FLOOR((b.AuthDate/100)-(LEFT(b.AuthDate,4)*100)) AS VARCHAR(4)),2)
||"-"||RIGHT("00"||CAST(FLOOR(b.AuthDate-(LEFT(b.AuthDate,6)*100)) AS VARCHAR(4)),2)
||" "||RIGHT("00"||CAST(FLOOR(b.AuthTime/3600) AS VARCHAR(4)),2)
||":"||RIGHT("00"||CAST(FLOOR((b.AuthTime-(FLOOR(b.AuthTime/3600)*3600))/60) AS VARCHAR(4)),2)
||":"||RIGHT("00"||CAST(b.AuthTime-(FLOOR(b.AuthTime/60)*60) AS VARCHAR(4)),2) AS DATETIME) AS 審核時間 FROM dbo.RP_VisitNumber a,dbo.RP_VisitNumberReport b,dbo.RP_VisitNumberReportResult c
WHERE b.VisitNumberDR=a.RowID AND c.VisitNumberReportDR=b.RowID AND b.AuthDate BETWEEN '20200517' AND '20200524'AND b.WorkGroupMachineDR="126"
這兩種轉換是在實際應用中遇到的,在kettle抽數據時也能將日期格式轉換成“yyyy-MM-dd HH-mm-ss”標準格式,供大家參考。