为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: 8
【操作系统】:CENTOS
【CPU】:
【问题描述】*:代码目的为查询列表,列表中有一个字段是json类型的数组,并且要判断数组每个元素的year项。写了两个sql方案,在windows里均可查询得到,但在centos里就不行。
select car.vehicle_id,
car.plate_no,
car.company_code,
c.company_name,
TO_CHAR(car.use_date, 'YYYY-MM-DD') AS use_date,
car.load_specifications,
car.manage_range,
car.driver_name,
car.driver_phone,
car.rectification,
car.vehicle_license_file_id,
(
SELECT value from (select * from cylinder.car)as q, jsonb_array_elements(q.insurance_license_files) as value
WHERE value ->> 'year' = datepart(year, CURRENT_DATE)
and q.vehicle_id ='00000'
limit 1) AS
insurance_license_files,
car.driving_license_file_id,
car.car_configuration,
car.rectification_before_photo_id,
car.rectification_after_photo_id,
car.geom,
car.manage_area
from cylinder.car as car
left join cylinder.company as c on car.company_code = c.code
where
car.vehicle_id = '00000'
参照其他问答说把select拆出来写,就写成了笛卡尔积的形式,依然不行。
select vehicle_id, plate_no, company_code, company_name,use_date,
load_specifications, manage_range, driver_name, driver_phone, rectification, vehicle_license_file_id,
driving_license_file_id, car_configuration, rectification_before_photo_id,
rectification_after_photo_id, geom, manage_area, b."VALUE" as insurance_license_files
from
(select car.vehicle_id, car.plate_no, car.company_code, c.company_name,
TO_CHAR(car.use_date, 'YYYY-MM-DD') AS use_date,
car.load_specifications, car.manage_range, car.driver_name, car.driver_phone, car.rectification, car.vehicle_license_file_id,
car.driving_license_file_id, car.car_configuration, car.rectification_before_photo_id,
car.rectification_after_photo_id, car.geom,
car.manage_area
from cylinder.car as car left join cylinder.company as c on car.company_code = c.code
WHERE car.vehicle_id ='00000') a,
( SELECT "VALUE" from (select * from cylinder.car)as q, jsonb_array_elements(q.insurance_license_files) as "VALUE"
WHERE "VALUE" ->> 'year' = datepart(year, CURRENT_DATE) and q.vehicle_id ='00000' LIMIT 1 ) AS b;
windows下:
linux下:
问题已解决,原因是centos上的JSON_MODE设置是0,不是适配postgreSQL的用法。代码里面写了'->>',centos上的达梦不适配。