Конвертировать nvarchar в Int, используя Case - PullRequest
0 голосов
/ 01 июля 2019

В настоящее время я пытаюсь преобразовать '20190208-10h9m / 1/1' в тип данных int.Эта строка указана в столбце String_Value.Кроме того, я использую регистр синтаксиса Case.

Я пробовал:

CASE WHEN PTXMEDE.PAT_ID = 'ID_TABLET' TEHN PTXMEDE.STRING_VALUE ELSE 0 END), CAST(PTXMEDE.STRING_VALUE As nvarchar) As ID_TABLET

Я получаю ошибку преобразования.

Полный синтаксис ниже:

Select
    PTXMEDE.ME,
    (CASE WHEN PTXMEDE.PAT_ID = 'ID_TABLET' THEN PTXMEDE.STRING_VALUE ELSE 0 END),CAST(PTXMEDE.STRING_VALUE As nvarchar) As ID_TABLET,
    SUM(CASE WHEN PTXMEDE.PAT_ID = 'Q1_MD' THEN PTXMEDE.NUM_VALUE ELSE 0 END) As Q1_MD,
    SUM(CASE WHEN PTXMEDE.PAT_ID = 'Q1_FPROB' THEN PTXMEDE.NUM_VALUE ELSE 0 END) As Q1_FPROB,
    SUM(CASE WHEN PTXMEDE.PAT_ID = 'Q1_RESULT' THEN PTXMEDE.NUM_VALUE ELSE 0 END) As Q1_RESULT,
    SUM(CASE WHEN PTXMEDE.PAT_ID = 'WEIGHT' THEN PTXMEDE.NUM_VALUE ELSE 0 END) As WEIGHT,
    SUM(CASE WHEN PTXMEDE.PAT_ID = 'HARDNESS' THEN PTXMEDE.NUM_VALUE ELSE 0 END) As HARDNESS,
    MAX(CASE WHEN PTXMEDE.PAT_ID = 'WEIGHT.T2+' THEN PTXMEDE.NUM_VALUE ELSE 0 END) As WEIGHTT2ULIMIT,
    MAX(CASE WHEN PTXMEDE.PAT_ID = 'WEIGHT.T2-' THEN PTXMEDE.NUM_VALUE ELSE 0 END) As WEIGHTT2LLIMIT,
    MAX(CASE WHEN PTXMEDE.PAT_ID = 'HARDNESS.T2-' THEN PTXMEDE.NUM_VALUE ELSE 0 END) As HARDNESST2LLIMIT,
    MAX(CASE WHEN PTXMEDE.PAT_ID = 'CQA1Quality' THEN PTXMEDE.NUM_VALUE ELSE 0 END) As CQA1Quality,
    MAX(CASE WHEN PTXMEDE.PAT_ID = 'CQA2Quality' THEN PTXMEDE.NUM_VALUE ELSE 0 END) As CQA2Quality,
    MAX(CASE WHEN PTXMEDE.PAT_ID = 'CQA3Quality' THEN PTXMEDE.NUM_VALUE ELSE 0 END) As CQA2Quality,
    PTXMEDE.DATE_LOCAL,
    PTXMEDE.SEQUENCE
FROM
   PTXMEDE
   JOIN PTXMIIF ON 
   PTXMIIF.ME = PTXMEDE.ME

WHERE
   PTXMEDE.ME IN (
       SELECT ME FROM PTXME
       WHERE CX_STRING_4 = '20190210-6h31m'
       AND MT = 'CDC_CU'
   )
   GROUP By PTXMEDE.ME, PTXMEDE.DATE_LOCAL,PTXMEDE.NUM_VALUE,PTXMEDE.SEQUENCE,PTXMEDE.STRING_VALUE, PTXMEDE.PAT_ID

Мой ожидаемый результат - возможность указать значение в столбце STRING_VALUE

1 Ответ

1 голос
/ 01 июля 2019

Все ветви выражения CASE должны иметь одинаковый тип в SQL. «Исключением» может быть то, что они не имеют одинаковый тип, но база данных выполняет неявное преобразование в правильные вещи (например, такие как в MySQL). Вот исправленная версия вашего выражения CASE:

CASE WHEN PTXMEDE.PAT_ID = 'ID_TABLET' THEN PTXMEDE.STRING_VALUE ELSE '0' END

Это заставит выражение CASE выводить весь текст. Если PTXMEDE.STRING_VALUE можно преобразовать в целое число, то теоретически вы также можете использовать это:

CASE WHEN PTXMEDE.PAT_ID = 'ID_TABLET' THEN CAST(PTXMEDE.STRING_VALUE AS INT) ELSE 0 END

В этом выражении CASE будет возвращаться целое значение.

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