Может ли кто-нибудь объяснить мне, что эта линия PHP / SQL пытается достичь - PullRequest
0 голосов
/ 20 сентября 2011

Меня попросили исправить проблему с веб-сайтом клиента, и я думаю, что эта строка хотя бы частично ответственна за ошибку:

$SQL="select 'SC' ||substr(10000+max(to_number(secondid, '99G999D9S'))+1,2,4) from table";

Я не могу точно сказать, что пытается выполнить эта строка выше, будь то просто кусок кода, который был написан неправильно или что-то важное и хорошо продуманное. Я знаю, что substr - это функция PHP, но она в двойных кавычках, так что это часть запроса, и я также знаю, что max и to_number являются функциями postgresql. Я понятия не имею, что такое SC, это не поле в таблице. Если я выполню этот запрос сам по себе:

SELECT 'SC' FROM table;

Я получаю «столбец» (неизвестного типа), и количество строк на единицу больше, чем количество строк в таблице (или то же самое, если вы добавляете пустую строку в конец каждой таблицы). Каждый ряд просто утверждает, что содержит SC. Какой смысл в || оператор? Если я правильно помню, это оператор ИЛИ, так как же запрос решает, что он хочет выбрать?

Извините за беспокойство, спасибо за ваше время.

Ответы [ 2 ]

4 голосов
/ 20 сентября 2011

Работа в стороне:

Исходное утверждение:

$SQL="select 'SC' ||substr(10000+max(to_number(secondid, '99G999D9S'))+1,2,4) from table";

Компоненты:

'99G999D9S'
Спецификатор формата: 2 цифры + разделитель группы + 3 цифры + десятичная точка + 1 цифра + знак.

to_number(secondid, '99G999D9S')
Преобразуйте поле secondid в число, используя вышеуказанный формат.

max(...)
Стандартная функция SQL max.

10000+max(...)+1
Добавьте 10,001 к результатам макс.

substr(...,2,4)
Извлечь 4 символа из результатов предыдущего, начиная с позиции символа 2.

SC || substr(...)
Объедините строку сверху с помощью SC.

1 голос
/ 20 сентября 2011

Запрос принимает значение поля secondid, преобразует его в числовое значение, используя 99G999D9S, затем находит максимум этих значений в таблице, добавляет 10000 и 1 к нему;преобразует результат в строку, принимает подстроку длиной 4 символа, начиная со второго символа;наконец добавляет к нему строку «SC» и возвращает вам.Для таблицы, в которой столбец secondid определен и отформатирован соответствующим образом, вы получите ровно 1 результат назад.Если этот столбец не определен или отформатирован по-другому, вы получите ошибку.

|| оператор - это конкатенация в SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...