У меня есть следующая проблема: есть таблица с данными столбца (тип - nvarchar), этот столбец может содержать любые символы, мне нужны только данные, которые являются числами или диапазоном чисел, но игнорировать белые пробелы. Например:Регулярное выражение в T-SQL
declare @tmp table (data nvarchar(192), Result nvarchar(192));
insert into @tmp SELECT '123', '<- valid';
insert into @tmp SELECT ' 123 ', '<- valid';
insert into @tmp SELECT '123-123', '<- valid';
insert into @tmp SELECT ' 123 - 123 ', '<- valid';
insert into @tmp SELECT '123jmj', '<- invalid';
insert into @tmp SELECT '123,5441', '<- invalid';
insert into @tmp SELECT '123,yjyj', '<- invalid';
SELECT * FROM @tmp
Набор данных результатов должен содержать только допустимые строки. Я могу попробовать следующие
SELECT * FROM @tmp WHERE data NOT LIKE '%[^0-9]%'
Но у меня есть только первый ряд.
Как Regex-подобной функциональности вы можете увидеть довольно ограниченным, как насчет некоторых альтернатив? Более ранние версии (2005+) имеют функцию 'ISNUMERIC()', а более новые (2012+) вы можете использовать 'TRY_PARSE()'. – Bridge
Вы можете использовать LTRIM (RTRIM (data)) ', который также даст вашу вторую строку. Для диапазона вам нужно будет добавить условие 'OR' к вашему' WHERE', это не должно быть слишком сложно, но вам может потребоваться «ЗАМЕНИТЬ» пробелы внутри значения. – HoneyBadger
@Bridge, 'ISNUMERIC' очень ненадежный, денежные знаки и арифметические знаки также оцениваются как истинные. 'TRY_PARSE' не будет работать для диапазонов. – HoneyBadger