sql重复正则表达式模式无限次

时间:2019-07-01 15:53:05

标签: sql sql-server regex sql-server-2017

我需要选择列中仅包含数字并以连字符结尾的位置

我正在运行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 个答案:

答案 0 :(得分:1)

您可以过滤除最后一个字符以外的任何字符都不是数字,最后一个破折号的地方。 DATALENGTH / 2假定为NVARCHAR类型。如果您使用的是VARCHAR,则只需使用DATALENGTH

FalseClass#||

答案 1 :(得分:0)

您可以使用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-

Demo

答案 2 :(得分:0)

SQL Server不支持正则表达式-仅对like功能进行了非常有限的扩展。

一种方法是:

where column like '%-' and
      column not like '%[^0-9]%-'