Как присвоить строковое значение столбцу типа данных Float - PullRequest
0 голосов
/ 09 мая 2019

У меня есть столбец с типом данных Float в хранимой процедуре. Если в этом столбце нет данных в БД, тогда я должен назначить '-' и вернуть результаты.

Я пытался вот так, но получал "Преобразование типа данных varchar в float."

 ISNULL(ABCColumn, '--') as ABCColumn.

Здесь ABCColumn - тип данных с плавающей запятой. Есть ли способ сделать это ??

Ответы [ 3 ]

0 голосов
/ 09 мая 2019

Здесь вы можете просто поставить

ISNULL(ABCColumn, '0') as ABCColumn.

В передней части вы можете проверить. если ABCColumn равно 0 означает, что вы можете положить все, что хотите ..

Или еще

Использование TRY_CAST

ISNULL(ABCColumn, TRY_CAST('--' AS DECIMAL)) as ABCColumn.

OR

ISNULL(CAST(@ABCColumn AS NVARCHAR), '--' ) as ABCColumn 
0 голосов
/ 09 мая 2019

Это одно выражение:

ISNULL(ABCColumn, '--') as ABCColumn

Возвращает один тип.Но какого типа?Возвращает ли оно число, потому что одно значение является числом?Или строка?

В этом случае ISNULL() возвращает число с плавающей точкой, потому что первый аргумент - это число с плавающей точкой.

Правила описаны в документации .

Решение состоит в том, чтобы оба значения были строками.У меня также есть предпочтение COALESCE() (потому что это стандартная функция).Итак:

COALESCE(CAST(ABColumn as VARCHAR(255)), '--') as ABCColumn
0 голосов
/ 09 мая 2019
;WITH CTE AS (
    SELECT CAST(11.35 AS FLOAT) AS Num
    UNION ALL
    SELECT NULL AS Num
)
SELECT ISNULL(CAST(Num AS VARCHAR), '--') AS NumString
FROM CTE

WITH CTE используется только для создания фиктивных данных; Столбец Num преобразуется в строку (для выравнивания с типом данных «-»); ISNULL применяется к данным того же типа

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