У меня есть база данных, которая выглядит следующим образом: (ну почти, P)T-SQL присоединиться IsNumeric
TABLE1:
COL1 int (pk)
COL2 bit
COL3 int (FK to TABLE2 COL4)
TABLE2:
COL4 int (pk)
COL5 varchar(50)
В зависимости от значения бита данные, содержащиеся в ТАБЛИЦЕ 2, будут численными или нет (1 является числовым).
Если я запускаю этот запрос:
SELECT
CAST(COL5 AS INT)
FROM
TABLE1
INNER JOIN
TABLE2 ON COL4 = COL3 AND COL2 = 1 AND ISNUMERIC(COL5)
Я получаю ошибку Ошибка преобразования:
Conversion failed when converting the varchar value '£0.00' to data type int
запроса, без броска, не возвращает это значение, хотя «£ 0,00» находится в таблице.
У меня создалось впечатление, что условие ON будет завершено до того, как я произнесет или я ошибаюсь (очевидно)?
Edit:
Продолжительность:
SELECT CASE WHEN COL5 LIKE '%[^0-9]%' THEN -1
WHEN CAST(COL5 as bigint) > 2147483647 THEN -1
ELSE cast(COL5 as int) END
FROM TABLE1
INNER JOIN TABLE2
ON COL4 = COL3 AND COL2 = 1
выполняется и возвращает не -1
значения
Nice объяснение на блоге. –