sql повторять регулярные выражения неограниченное количество раз - PullRequest
0 голосов
/ 01 июля 2019

Мне нужно выбрать, где столбец содержит только цифры и заканчивается дефисом

Я использую SQL Server Management Studio v17.9.1

Я пробовал:

select * from [table] where [column] like '[0-9]*-'
select * from [table] where [column] like '[0-9]{1,}-'
select * from [table] where [column] like '[0-9]{1,2}-'

ни одна из этих работ. Выражение ([0-9] * -) работает в любом тестере регулярных выражений, с которым я его запускал, SQL просто не нравится, как и другие варианты поиска, которые я нашел.

Ответы [ 3 ]

1 голос
/ 01 июля 2019

Вы можете фильтровать, где любой, кроме последнего символа, не являются числами, а последний - тире. DATALENGTH / 2 предполагает тип NVARCHAR. Если вы используете VARCHAR, просто используйте DATALENGTH

SELECT
    * 
FROM 
    [table]
WHERE 
    [column] like '%-'
    AND
    LEFT([column], (datalength([column])/2)-1) NOT LIKE '%[^0-9]%'
0 голосов
/ 01 июля 2019

SQL Server не поддерживает регулярные выражения - только очень ограниченное расширение функциональности like.

Один из методов:

where column like '%-' and
      column not like '%[^0-9]%-' 
0 голосов
/ 01 июля 2019

Вы можете использовать функции left() и right(), как показано ниже:

with [table]([column]) as
(
 select '1234-'  union all
 select '{123]'  union all
 select '1234'   union all
 select '/1234-' union all
 select 'test-'  union all
 select '1test-' union all
 select '700-' 
)
select *
  from [table] 
 where left([column],len([column])-1) not like '%[^0-9]%'
   and right([column],1)='-';

 column
 ------
 1234-
 700-

Демо

...