-- ho_his.cf_bsp_addins definition
-- 创建ID计数器系列,id SERIAL时,自动生成系列
-- create sequence "ho_his".cf_bsp_addins_id_seq increment by 1 start with 1
-- 创建表
-- create_datetime,update_datetime为约定每张表都需要的字段
CREATE TABLE ho_his.cf_bsp_addins (
id SERIAL PRIMARY KEY, -- PostgreSQL,人大金仓
id INT AUTO_INCREMENT PRIMARY KEY, -- TDSQL
-- id numeric(10,0) DEFAULT nextval('ho_his.cf_bsp_addins_id_seq'::regclass) NOT NULL, // 数据库自动生成
code varchar(100) DEFAULT NULL::varchar NOT NULL,
domId varchar(100) DEFAULT NULL::varchar NOT NULL,
create_datetime timestamp NOT NULL,
update_datetime timestamp NOT NULL,
create_user_dr varchar(32) NOT NULL,
update_user_dr varchar(32) NOT NULL,
activity bool DEFAULT true NOT NULL,
CONSTRAINT cf_bsp_addins_pkey PRIMARY KEY (id)
);
CREATE UNIQUE INDEX cf_bsp_addins_domid_un ON ho_his.cf_bsp_addins ("domId");
CREATE UNIQUE INDEX cf_bsp_addins_un ON ho_his.cf_bsp_addins (code);
COMMENT ON COLUMN "ho_his"."cf_bsp_addins"."id" IS '主键';
COMMENT ON COLUMN "ho_his"."cf_bsp_addins"."code" IS '代码';
COMMENT ON COLUMN "ho_his"."cf_bsp_addins"."domId" IS '调用id';
-- 查询seq - 自增加变量
SELECT * FROM sys_statio_all_sequences WHERE relname LIKE '%bsp_msg%'
-- 让计数器归0
-- 设置步调-100
ALTER SEQUENCE cf_bsp_msg_x_id_seq INCREMENT BY -100 ;
-- 调用一次seq, -100
SELECT nextval('cf_bsp_msg_x_id_seq'::regclass);
-- 调用一次seq,-100
SELECT nextval('cf_bsp_msg_x_id_seq'::regclass) ;
在mybatis.xml中忽略特殊字符查询记录写法
select code, id from cf_bsp_alert_code t
where REGEXP_REPLACE(t.code,'[^A-Za-z0-9]','') like concat('%',REGEXP_REPLACE(#{dto.code},'[^A-Za-z0-9]',''),'%')
使用ilike
来模糊查询
(code ilike concat('%', #{dto.code}, '%') or description ilike concat('%',#{dto.code},'%'))
使用UPPER
转大写,再模糊查询
(UPPER(code) like concat('%', UPPER(#{dto.code}), '%') or UPPER(description) like concat('%',UPPER(#{dto.code}),'%'))
使用CURRENT_DATE
来判断当前是不是有效
AND d.activity=true AND d.is_deleted=0
AND (t.start_date is NULL OR CURRENT_DATE>=t.start_date)
AND (t.end_date IS NULL OR t.end_date>=CURRENT_DATE)
ORDER BY d.id ASC
使用TO_DATE
来查询表中数据
AND d.activity=true AND d.is_deleted=0
AND (t.start_date is NULL OR to_date('20250501','yyyymmdd')>=t.start_date)
AND (t.end_date IS NULL OR t.end_date>=CURRENT_DATE)
ORDER BY d.id ASC
cf_bsp_test_patient
表中只有3行记录,pa_pat_mast表有28万行数据
explain analyze
select t.id,t.patient_id,t.start_date,t.end_date, p.name "patientName"
from cf_bsp_test_patient t
left join pa_pat_mast p on p.id=t.patient_id
where 1=1 and (t.start_date >= '20250501' or t.start_date is null) order by t.id asc LIMIT 500
上面解析sql,评估运行花费350ms时间
explain analyze
select t.id,t.patient_id,t.start_date,t.end_date, p.name "patientName"
from cf_bsp_test_patient t
left join pa_pat_mast p on p.id=cast(t.patient_id as bigint)
where 1=1 and (t.start_date >= '20250501' or t.start_date is null) order by t.id asc LIMIT 500
连表前转换字段类型,此时运行SQL,解析SQL,评估运行花费0.129ms
修改cf_bsp_test_patient表的patient_id字段类型修改成bigint后,速度提升。
尝试使用returning返回插入id并不能实现,最终使用再次查询
INSERT INTO cf_bsp_prdline
(code, caption, note, create_datetime, update_datetime, hospital_dr, create_user_dr, update_user_dr, activity, order_no)
VALUES ('x', '描述', '', now(), now(), -1, '0', '0', true, 14) ;
INSERT INTO cf_bsp_prdline_module
(code,prdline_dr, caption, note, create_datetime, update_datetime, hospital_dr,
create_user_dr, update_user_dr, activity, order_no)
SELECT m.code,new_prdline.id,m.caption,m.note,m.create_datetime,m.update_datetime,m.hospital_dr,
m.create_user_dr,m.update_user_dr,m.activity,m.order_no
FROM (select id from cf_bsp_prdline where code='doctortt') new_prdline,
( VALUES
('xx1', '描述1', '', now(), now(), NULL, '0', '0', true, NULL),
('xx2', '描述2', '', now(), now(), NULL, '0', '0', true, NULL),
('xx3', '描述3', '', now(), now(), NULL, '0', '0', true, NULL),
('xx4', '描述4', '', now(), now(), NULL, '0', '0', true, NULL),
('xx5', '描述5', '', now(), now(), NULL, '0', '0', true, NULL)
) AS m(code, caption, note, create_datetime, update_datetime, hospital_dr,
create_user_dr, update_user_dr, activity, order_no);
访问量: 636432