Вы можете попробовать PATINDEX , чтобы найти и отклонить значения с нецифровыми символами:
declare @t table (field varchar(40))
insert into @t (field)
values
('40340,033680998078'),
('40340'),
('033680998078')
select *
from @t
where patindex('%[^0-9]%',field)=0
Этот запрос не может использовать какие-либо индексы и должен будет сканировать всю таблицу. Лучше всего избегать хранения нецифровых символов в этом поле.
Как правило, если поле содержит числовые данные, оно должно использовать числовой тип, а не varchar. Это должно быть int
, bigint
или numeric(...,0)
.
С другой стороны, это поле может быть бизнес-полем для хранения, например, номера счета, авиабилета или номера НДС.
В этом случае можно использовать ограничение CHECK
, чтобы гарантировать, что недопустимые значения не могут быть вставлены в таблицу. Это возможно с помощью PATINDEX:
declare @t table
(
field varchar(40) CHECK (patindex('%[^0-9]%',field)=0)
);
Это проверочное ограничение позволит:
insert into @t (field)
values
('40340'),
('033680998078')
Но отклонить:
insert into @t (field)
values
('40340,033680998078')