?1.報錯Oracle語句如下
SELECT YK_CKGY.ID,YK_CKGY.DJH,YK_CKGY.BLRQ,YK_CKGY.ZBRQ,YK_CKGY.SHRQ,YK_CKGY.YT,YK_CKGY.ZDR,YK_CKGY.SHR,YK_CKGY.BZ,YK_CKGY.JZRQ,YK_CKGY.ZT,YK_CKGY.CKLX,(case YK_CKGY.CKLXwhen '09' then'藥房調借'when '02' then'科室退藥'when '03' then'損耗出庫'when '04' then'科室領藥'when '06' then'藥房退藥'when '07' then'藥房領藥'when '88' then'領藥計劃'when '08' then'過期出庫'when '10' then'其它出庫'end) AS LXMC,YK_CKGY.BMNBBH,(select CO_QX_XTBM.BMMCfrom CO_QX_XTBMwhere YK_CKGY.BMNBBH = CO_QX_XTBM.BMNBBH) as DCBMMC,(select CO_QX_XTBM.BMMCfrom CO_QX_XTBMwhere YK_CKGY.DRBM = CO_QX_XTBM.BMNBBH) as DRBMMC,YK_CKGY.DRBM,(select sum(yk_ckmx.cksl * YK_CKMX.CBJ)from yk_ckmxwhere gyid = YK_CKGY.id) as jhjeFROM YK_CKGYWHERE 1 = 1and substr(YK_CKGY.BLRQ, 1, 10) >= '2024/12/07'and substr(YK_CKGY.BLRQ, 1, 10) <= '2025/01/07'and YK_CKGY.JZRQ is nulland (YK_CKGY.DRBM = 2202)and YK_CKGY.ZT = 2 andYK_CKGY.jgdm = '22'and YK_CKGY.CKLX IN ("04", "07", "03", "02", "06", "10")
2.報錯原因:?
Oracle 數據庫中,雙引號用于引用列名、表名等標識符(區分大小寫)。但是,在 SQL 中,數字或字符串應該使用單引號。因此,
IN ("04", "07", "03", "02", "06", "10")
中的雙引號應該替換為單引號。
3:修正:?
?IN ('04', '07', '03', '02', '06', '10')
4.其他潛在問題:
substr(YK_CKGY.BLRQ, 1, 10)
用于截取日期的前 10 位,如果BLRQ
是日期字段,可以考慮直接使用TO_DATE
函數來進行日期比較,避免使用substr
來處理日期字段。
SELECT YK_CKGY.ID,YK_CKGY.DJH,YK_CKGY.BLRQ,YK_CKGY.ZBRQ,YK_CKGY.SHRQ,YK_CKGY.YT,YK_CKGY.ZDR,YK_CKGY.SHR,YK_CKGY.BZ,YK_CKGY.JZRQ,YK_CKGY.ZT,YK_CKGY.CKLX,(case YK_CKGY.CKLXwhen '09' then'藥房調借'when '02' then'科室退藥'when '03' then'損耗出庫'when '04' then'科室領藥'when '06' then'藥房退藥'when '07' then'藥房領藥'when '88' then'領藥計劃'when '08' then'過期出庫'when '10' then'其它出庫'end) AS LXMC,YK_CKGY.BMNBBH,(select CO_QX_XTBM.BMMCfrom CO_QX_XTBMwhere YK_CKGY.BMNBBH = CO_QX_XTBM.BMNBBH) as DCBMMC,(select CO_QX_XTBM.BMMCfrom CO_QX_XTBMwhere YK_CKGY.DRBM = CO_QX_XTBM.BMNBBH) as DRBMMC,YK_CKGY.DRBM,(select sum(yk_ckmx.cksl * YK_CKMX.CBJ)from yk_ckmxwhere gyid = YK_CKGY.id) as jhjeFROM YK_CKGYWHERE 1 = 1and substr(YK_CKGY.BLRQ, 1, 10) >= '2024/12/07'and TO_DATE(substr(YK_CKGY.BLRQ, 1, 10), 'YYYY/MM/DD') <=TO_DATE('2025/01/07', 'YYYY/MM/DD')and YK_CKGY.JZRQ is nulland (YK_CKGY.DRBM = 2202)and YK_CKGY.ZT = 2and YK_CKGY.jgdm = '22'and YK_CKGY.CKLX IN ('04', '07', '03', '02', '06', '10')
5.總結?
- 使用單引號來定義字符串值,例如
IN ('04', '07', '03', '02', '06', '10')
。- 如果
BLRQ
字段是日期類型,考慮直接使用TO_DATE
進行日期比較,而不使用substr
來截取字符串。
?補充:
在 Vue 組件中使用正則替換雙引號:
使用 replace()
替換雙引號為單引號:
let str = '("04", "07", "03", "02", "06", "10")';
str = str.replace(/"([^"]+)"/g, "'$1'");
解釋:
-
正則表達式
/\"([^\"]+)\"/g
:\"
匹配雙引號。([^\"]+)
匹配雙引號內的內容,并捕獲它。$1
表示替換成捕獲的內容。g
標志表示全局匹配,即替換字符串中的所有雙引號。
-
replace()
方法:- 將匹配到的內容替換為單引號包裹的內容。
?
?