Прошло много времени с тех пор, как я написал одну из своих публикаций "Преобразование MySQL в PostgreSQL".
Итак, сегодняшняя проблема заключается в следующем:
Исходные запросы MySQL включают предложения where, которые выглядят примерно так:
WHERE id LIKE '%6%'
OR createdtime LIKE '%6%'
OR modifiedtime LIKE '%6%'
OR start_date LIKE '%6%'
OR end_date LIKE '%6%'
OR sc_related_to LIKE '%6%'
OR tracking_unit LIKE '%6%'
OR message LIKE '%6%'
Этот запрос является частью общесистемного поиска. В этом случае система ищет 6
, если бы я попросил ее найти что-то еще, например, сказать слово user
, вместо %6%
, мы получили бы %user%
.
Теперь проблема в том, что указанные выше типы данных не всегда являются строками. Целочисленные поля, такие как id
и поля даты / времени, такие как createdtime
, сравниваются со строками. В MySQL это вроде бы нормально, но раздражительный PostgreSQL становится раздражительным, когда видит этот запрос.
Я знаю, что для некоторых полей я могу использовать функцию to_char
, поэтому, например, часть предложения в PostgreSQL может выглядеть так:
to_char(id, '999') LIKE '%6%'
К сожалению, я не могу просто пройтись по запросам и добавить to_char
в каждое применимое поле из-за PHP-бэкэнда. Вот как выглядит PHP-код для генерации предложения WHERE
:
$where .= $tablename.".".$columnname." LIKE '". formatForSqlLike($search_val) ."'";
Примечание: это часть цикла, поэтому приведенная выше строка генерирует все отдельные сравнения.
Итак, даже если я смогу обойти сравнение типов с to_char
, я не смогу реализовать его, потому что to_char
может потребоваться определенный 2-й параметр для другого типа данных и даже если бы я мог использовать тот же параметр для всех типов данных некоторые из типов данных будут строками, и передача строки в to_char
приводит к ошибке.
Итак, мне нужен способ заставить PHP определить тип столбца и использовать правильное значение to_char
(или вообще не использовать его) соответственно, или мне нужно получить PostgreSQL для сравнения разных типов данных.
Спасибо за вашу помощь, хорошего дня!