2015-03-11 5 views
0

мне нравится, чтобы проверить длину указанных полей й длина и доступное значением является числовым значениемSQL записей проверка в таблице

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

(case when len(columnA) = 10 then 0 else 1 end)+ 
(case when IsNumeric(columnA) = 1 then 0 else 1 end)+ 
(case when len(columnB) = 8 then 0 else 1 end)+ 
(case when IsNumeric(columnB) = 1 then 0 else 1 end) 

Есть ли лучший подход, поскольку мне нужно это для более чем 40 столбцов, а их тип данных - varchar, и каждый из столбцов будет иметь определенную длину.

используя некоторый короткий путь для снижения выше двух заявлений случае в одной строке

+0

Вы можете создать определенную пользователем функцию и передать значение столбца, длину, которую вы хотите проверить, и переместить в эту функцию два оператора case (len и isnumeric). вызывать функцию в select в каждом столбце –

+0

IsNumeric НЕ означает, что значения фактически являются числами. Такие вещи, как 1e4 и $ 145, будут оцениваться как истинные при использовании IsNumeric. –

+0

является ли ограничение проверки на таблицу опцией? –

ответ

1

Если вы только заботиться о том, что столбец является недопустимым и в меньшей степени заинтересованы в каких критериев он не смог на то вы можете просто положить оба критерия в одном сазе, как

(case when len(columnA) = 10 and IsNumeric(columnA) = 1 then 0 else 1 end) 

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

case when len(columnA) = 10 and ColumnA not like '%[^0-9]%' then 0 else 1 end 

Это немного некрасиво, потому что мы хотим сказать не [не в пределах], так что вы можете захотеть изменить логики немного.

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