2015-01-14 2 views
0

У меня есть отчет, который создает список значений, которые должны быть числами, но в настоящее время хранятся в виде varchar. На моем экспорте я заливка VarChar характера как Int, но когда кто-то неправильно вводит символ или специальный символ в докладе не потому, что это не может преобразовать в INTSQL Server Check String для пробелов, специальных символов и символов

Current List 
557780 
558871 
5588a6 
5588 7 

Что мне нужно что-то, что будет поменять те значения, которые содержат пробелы или символы для в междунар ошибки как 99999999, так что конечный результат будет

557780 
558871 
99999999 
99999999 

Я знаю, что могу сделать это, используя что-то вроде этого

CASE WHEN SomeNum LIKE '%_%' THEN 99999999 ELSE SomeNum 
    WHEN SomeNum LIKE '%a%' THEN 99999999 ELSE SomeNum END 

Но есть ли лучший способ сравнить с каждым письмом и специальным фрахтователем в отдельности?

+1

Какая версия SQL Server? – dario

+0

SQL SEVER 2012 SP1 – ScholarYoshi

ответ

2

Вы можете попробовать это на SQL 2012+:

SELECT COALESCE(TRY_CONVERT(INT, SomeNum), 99999999) AS Value 
FROM YourTable 
+0

Спасибо! Это именно то, что мне нужно. – ScholarYoshi

2

вы можете использовать это сделать с рисунком

case when SomeNum NOT LIKE '%[^0-9]%' THEN 99999999 ELSE cast(SomeNum as int) END 
+0

Я пробовал это, но я все равно получаю ту же ошибку. Не удалось преобразовать – ScholarYoshi

+2

@ScholarYoshi, вам нужно сделать cast in else cast (someNum as int) – radar

2

Вы можете использовать ISNUMERIC, если вы находитесь в SQL Server 2008 или позже. Обратите внимание, что это будет соответствовать деньгам и десятичным знакам и т. Д. Если вы просто ищете целое число, вам нужно задать регулярное выражение. См. Ответ радиолокатора.

Их пример это для полноты:

USE AdventureWorks2012; 
GO 
SELECT City, PostalCode 
FROM Person.Address 
WHERE ISNUMERIC(PostalCode)<> 1; 
GO 

Если вы до SQL Server 2008 вы можете использовать ответ радара с регулярным выражением

Смежные вопросы