Нет, нет возможности избежать возврата двух столбцов. Но - если вы используете выборки строки MySQL-драйвер, который использует ассоциативные поля возвращающихся (например, РНР mysqli_result::fetch_assoc
), вы можете использовать трюк:
SELECT
IF(enddate='0000-00-00',null,enddate) as enddate,
employees.*
from
employees
where
(enddate is null || enddate > now())
order by name asc
-Ну забудьте квалифицировать полное имя таблицы (т.е. employees.*
, а не только *
). Образец можно найти here.
Тогда первое поле будет вашим выражением, а не оригинальным полем. Фактически, это то, что вы увидите в связанном примере SQLFiddle, т. Е. Использует выбор ассоциативных полей, поэтому одно поле переопределяет другое, но это не означает, что в исходном наборе данных будет один столбец (так что в общем случае вы не можете полагаться на то - чтобы убедиться, что вы можете, конечно, использовать mysql
клиента)
в общем случае: только полное последовательность полей будет делать вещи (так - да, *
не может быть использован)
Я бы предложил ввести нужные поля вместо '*'. –
Кроме того, вы можете использовать 'NULLIF (enddate, '0000-00-00')' :-) –
'SELECT *', как правило, довольно ленивый подход к извлечению данных из БД, так что просто укажите нужные поля. Почему я говорю, что это лениво, так это то, что во многих случаях вы никогда не используете каждый столбец в таблице после извлечения данных, поэтому тратите пропускную способность, память и т. Д. На извлечение этих неиспользуемых данных, в отличие от простого указания полей , Я также считаю, что указание полей дает лучший долгосрочный смысл для ясности кода. Вы можете смотреть свой код в год по линии и точно понимать, с какими данными вы собираетесь работать. –