У меня есть varchar (100) столбец в таблице, которая содержит соединение целых чисел (как строки) и строки нецелого числа. Например.
| dimension varchar(100) |
| '5' |
| '17' |
| '3' |
| 'Pyramids' |
| 'Western Bypass' |
| '15' |
Как я могу записать выражение в, например, подвести итог всех значений, которые являются допустимыми целыми числами? Если я должен был попробовать:
-- should return 5 + 17 + 3 + 15 = 40
SELECT
SUM( CONVERT( INT, dimension ) )
FROM
mytable
Я получил бы a Conversion failed when converting the varchar value 'Pyramids' to data type int.
ошибка.
Есть ли тест, который я могу использовать в своем выражении, во многом как ISNULL()
функция, которая разрешает мне указывать значение по умолчанию, если поле не является числом?
Попробуйте это:
SELECT
SUM(CASE ISNUMERIC(dimension)
WHEN 1 THEN CONVERT( INT, dimension )
ELSE 0
END)
FROM
mytable
CASE должен проверить, является ли dimension
числовым - если да, верните это значение. Если оно не является числовым, верните значение по умолчанию (здесь: 0)
Если вам нужно запрашивать это довольно часто, вы также можете добавить в таблицу персистентный вычисляемый столбец, который инкапсулирует это вычисление и хранит значение. Таким образом, при суммировании и т.д. вы не будете постоянно пересчитывать значение:
ALTER TABLE mytable
ADD NumericValue AS CASE ISNUMERIC(dimension)
WHEN 1 THEN CONVERT( INT, dimension ) ELSE 0 END PERSISTED
Теперь вы можете SELECT dimension, numericvalue FROM mytable
и получить оба значения без необходимости выполнения каких-либо вычислений.