在破折号之间测量字符串的LEN

时间:2017-12-26 15:55:18

标签: sql sql-server

我正在尝试搜索格式错误的电话号码。我可以在第一个破折号之前和之后获得字符串的长度。我在中间数字上画了一个空白。这是我到目前为止所做的。

 CREATE TABLE Phone
 ( PhoneNum varchar(12) NULL)

 INSERT INTO Phone (PhoneNum ) 
 VALUES ('11-1111-2369'),('236-5469-111'), ('239-279-7777')

 SELECT LEN(LEFT(PhoneNum,CHARINDEX('-',PhoneNum)-1)), 
 LEN(Right(PhoneNum,CHARINDEX('-',REVERSE(PhoneNum))-1)), PhoneNum FROM 
 Phone

我希望看看两个破折号之间的任何长度是否为LEN = 3以外的其他东西

这似乎有效

SELECT LEN( REPLACE(phonenum,'-','')) -(LEN(LEFT(PhoneNum,charindex('-
',PhoneNum)-1)) + LEN(Right(PhoneNum,CHARINDEX('-',REVERSE(PhoneNum))-1))) ,
   PhoneNum from phone

2 个答案:

答案 0 :(得分:4)

不确定什么是正确的组合,但例如假设xxx-xxx-xxxx

    "rewrites": [
  {
    "source": "/api/**",
    "function": "api"
  }

将获得正确的手机

select * from phone where PhoneNum like '___-___-____'

不正确的

此外,这计算破折号之间的len

  select * from phone where PhoneNum not like '___-___-____'

对LIKE运算符通配符的引用: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql

答案 1 :(得分:2)

  

我希望看看两个破折号之间的任何长度是否为LEN = 3以外的其他东西

在这种情况下,另一种方法是根本不计算长度,而是使用模式匹配:

SELECT PhoneNum
FROM Phone
WHERE PhoneNum NOT LIKE '%-___-%'

注意:与Horaciux的答案不同,我在模式中使用%。这样可以处理模式的第一和第三位长度变化。