Команда T-SQL для получения только строк, которые могут выполнять ПРИВЕДЕНИЕ()

#sql-server #tsql

#sql-сервер #tsql

Вопрос:

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

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

Спасибо

Ответ №1:

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

 SELECT *
    FROM YourTable
    WHERE ISNUMERIC(YourColumn   'e0') = 1
  

Комментарии:

1. Также важно не предполагать, что WHERE это произойдет раньше CAST . Оператору все равно потребуется использовать CASE WHEN ISNUMERIC(YourColumn 'e0') = 1 THEN CAST(YourColumn AS FLOAT) END в SELECT списке, чтобы избежать возможности недопустимых ошибок приведения.

Ответ №2:

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

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

Смотрите ISNUMERIC().

Ответ №3:

Попробуйте сначала использовать функцию ISNUMERIC, и только когда она будет числовой, примените ПРИВЕДЕНИЕ.

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

Ответ №4:

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

 WHERE TRY_PARSE(price_col AS FLOAT) IS NOT NULL
  

Кроме того, вы не должны использовать неточные типы данных для currency. Вы должны использовать ЧИСЛОВЫЕ, ДЕСЯТИЧНЫЕ или ДЕНЕЖНЫЕ значения.