Может ли тип SQL-типа данных повлиять на состав SQL-запроса? - PullRequest
0 голосов
/ 19 декабря 2018

Я написал несколько запросов sql для генерации данных из базы данных postgresql.Когда я пытаюсь найти слово (например, работа), оно работает, но если я выполняю то же самое для bigint (например, 45), я не получаю результата.Я получил следующую ошибку: Предупреждение: pg_num_rows () ожидает, что параметр 1 будет ресурсом, логическое значение указано в require ().См. Fiddle для базы данных. Может ли это быть связано с тем, что это bigint?Должен ли он быть определен по-другому.

$table = "test";
$field="\"number\"";
$text = "45"; # $text = 45;
$query = "SELECT DISTINCT \"number\", \"word\", \"sentence\", lower(\"sentence\") FROM \"" . $table . "\" WHERE ";
$query = $query . $field . " ~* '" . $text . "' ";
echo $query;

$recordset = pg_query($connection, $query);
if($recordset)
{
    $row = pg_numrows ($recordset);
    var_dump($row);
}

Определение теста таблицы:

CREATE TABLE "test" (
  "id" SERIAL,
  "number" BIGINT NOT NULL,
  "word" VARCHAR,
  "sentence" VARCHAR
);
INSERT INTO test (id, number, word, sentence) VALUES
    (1, "451", 'make', 'I will make you great'),
    (2, "45", 'new', 'Is this new ?'),
    (3, "57", 'work', 'I always work very hard'),
    (4, "48", 'sell', 'Are you going to sell your house'),
    (5, "781", 'feel', 'Do you feel well?')

1 Ответ

0 голосов
/ 19 декабря 2018

В скрипте SQL, где вы говорите, что он работает, используется MySQL, поэтому здесь он не имеет значения.

Это не работает и вызывает ошибку, поскольку PostgreSQL не имеет неявных приведений типов из числовых в строковые типы данных инаоборот.Причина в том, что при перегрузке функций и операторов это может привести к неоднозначности и неожиданному поведению в некоторых случаях.

Решение для вас - использовать приведение типа:

... WHERE CAST(number AS text) ~* '^45.*'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...