Выражение в случае, когда Clasue не работает в запросе MySql - PullRequest
1 голос
/ 03 апреля 2020

Я пишу ниже запрос в MySql 5.7, тип NUMBER_TRADE_ является двойным, но все значения RE равны '1'.

SELECT 
    NUMBER_TRADE_, 
    (CASE NUMBER_TRADE_
        WHEN (NUMBER_TRADE_ = 0) THEN '0'
        WHEN (NUMBER_TRADE_ > 0) THEN '1'
    END) RE
from CANDLE_STICK;

Результат запроса:

----------------------
| NUMBER_TRADE_ | RE |
----------------------
| 0             | 1  |
| 1             | 1  |
| 1             | 1  |
| 0             | 1  |
| 0             | 1  |
----------------------

1 Ответ

1 голос
/ 03 апреля 2020

Вы должны удалить NUMBER_TRADE_ после CASE:

SELECT 
    NUMBER_TRADE_, 
    (CASE 
        WHEN (NUMBER_TRADE_ = 0) THEN '0'
        WHEN (NUMBER_TRADE_ > 0) THEN '1'
    END) RE
from CANDLE_STICK;

, потому что ваш код сравнивается NUMBER_TRADE_ с логическими выражениями NUMBER_TRADE_ = 0 и NUMBER_TRADE_ > 0. Вы можете упростить свой код следующим образом (если нет регистра NUMBER_TRADE_ для отрицательного значения):

SELECT 
    NUMBER_TRADE_,
    CAST((NUMBER_TRADE_ > 0) AS CHAR(1)) RE
from CANDLE_STICK;

или даже:

SELECT 
    NUMBER_TRADE_,
    (NUMBER_TRADE_ > 0) RE
from CANDLE_STICK;

, если для * 1016 нет проблем * быть целым числом. Смотрите демо . Результаты:

> NUMBER_TRADE_ | RE
> ------------: | -:
>             0 |  0
>             1 |  1
>             1 |  1
>             0 |  0
>             0 |  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...