2010-08-02 3 views
0

Использование C# .NET и MYSQLКак использовать сазе

Я хочу использовать сазе как SQL

Query

SELECT vehicleno, 
     brandname, 
     CASE 
     WHEN inexpire < 0 THEN 'Expired' 
     ELSE inexpire 
     END AS inexpire 
FROM (SELECT Concat(plateno, vehicleno) AS vehicleno, 
       brandname, 
       Datediff(inedate, Curdate()) AS inexpire 
     FROM tb_car 
     WHERE inedate < DATE_ADD(Curdate(), INTERVAL 30 DAY) 
     GROUP BY vehicleno) AS tab1 

При запуске запроса он показывает результат, как

System.Byte[] вместо "Expired"

в вышеприведенном Qu чень inexpire является столбец значений

Как я могу решить эту проблему .....

Нужна Запрос Помощь

+0

Кажется, что вы смешиваете разные типы данных для inexpire, либо получаете числовое значение (вы проверяете, меньше ли это значение), либо строка «Истек». –

+0

Что означает 'inexpire', чтобы вернуться? Вы хотите, чтобы она вернула строку «Истек», если она истекла, и количество дней, отбрасываемых в строку, если это не так? Или что-то другое? –

ответ

4

Я думаю, вам нужно будет использовать тот же тип данных для обоих случаев

eg

case when inexpire < 0 then 'Expired' else 'inexpired' end as inexpire 

или

case when inexpire < 0 then 1 else inexpire end as inexpire 

Редактировать

На самом деле я просто быстрый тест на моей машине это смешение типов данных не вызывает ошибку, но результат просто показывает, как Blob в MySQL Workbench

SELECT 
cast(CASE WHEN inexpire < 0 THEN 'Expired' ELSE inexpire END as char) as inexpire 

остановки этот вопрос предлагается по предложению here. Таким образом, это должно избежать ошибки Byte[].

+1

Я действительно удивлен, что MySQL не вызывает ошибку в этом случае. Я думаю, что Sybase, MS и IBM DB2/UDB все повышают ошибки, когда тип возврата из случая отличается (или, по крайней мере, нет никакого неявного преобразования). Мне было бы интересно узнать, что такое фактический тип базы данных 'inexpired'. –

+0

@Nathan - Может быть, он просто отличает число до строки. Я не в состоянии проверить это на данный момент. –

+0

Поведение MySQL в отношении такого выражения можно настроить. Я думаю, что по умолчанию он выдаст предупреждение в лучшем случае. – Mchl