Команда T-SQL, чтобы получить только те строки, которые могут CAST () - PullRequest
2 голосов
/ 20 мая 2011

У меня есть БД необработанных данных, в которой есть все как varchar, один из столбцов содержит цену, которая по большей части легко конвертируется в FLOAT.Однако в этом столбце есть несколько строк, содержащих мусор с кучей символов, которые не будут преобразованы в плавающие.

Есть ли способ выбрать только те строки, которые будут преобразованы в число с плавающей точкой (т. Е. Только те, которые на самом деле имеют число)?

Спасибо

Ответы [ 5 ]

4 голосов
/ 20 мая 2011

Примечание : Важно включить + 'e0' в числовой тест, поскольку такие вещи, как '+', '$', '.' и '3e8' в противном случае все вернут 1.1008 *

SELECT *
    FROM YourTable
    WHERE ISNUMERIC(YourColumn + 'e0') = 1
1 голос
/ 20 мая 2011

Вы пробовали функцию ISNUMERIC?

SELECT *
FROM <table>
where ISNUMERIC(column)=1

См. ISNUMERIC () .

0 голосов
/ 09 ноября 2015

Если вы используете SQL Server 2012+ и ISNUMERIC() дает вам посадки, вы можете использовать TRY_PARSE(), что позволяет вам указать точный тип данных.

WHERE TRY_PARSE(price_col AS FLOAT) IS NOT NULL

Кроме того, вы не должны использовать неточные типы данных для валюты. Вы должны использовать NUMERIC, DECIMAL или MONEY.

0 голосов
/ 20 мая 2011

Как насчет WHERE ISNUMERIC(price_col) = 1?

0 голосов
/ 20 мая 2011

Попробуйте сначала использовать функцию ISNUMERIC, и только когда она числовая, примените CAST.

http://msdn.microsoft.com/en-us/library/ms186272.aspx

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