我的电话号码很少:
Tele
-----
251510X25
364680X5
12345,X34
12345X
x57823889
1234567X12/7
1234567X,12/7
我想要只在X之前和之后获得具有数字的电话 我的输出应该是:
Tele
-----
251510X25
364680X5
1234567X12/7
我写了这样一个查询:
SELECT ID,TELP,
CASE
WHEN PATINDEX('%[0-9]%', TELP) >0 THEN
RTRIM(LEFT(TELP, PATINDEX('%[0-9]%', TELP)-1))
ELSE TELP
END as TELP1
FROM [teble1] where len(TELP) <=10 and PATINDEX('%[0-9]%', TELP) >0
and (TELP like '%x%' or TELP like '%/%')
我无法获得所需的输出。我有大约100k这样的记录。
答案 0 :(得分:1)
LIKE
运算符可以在这里工作:
SELECT *
FROM [teble1]
WHERE
TELP LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9]X[0-9]%';
上述类似图案表示捕获任意七位数的数字,然后是X
,之后至少跟一个数字。
SQL Server没有非常强大的正则表达式支持,但为了弥补这一点,他们增强了LIKE
以支持一些基本的正则表达式模式匹配,例如[0-9]
来表示任何数字。
答案 1 :(得分:0)
我认为简单的PATINDEX()
功能可以在这里获得rto电话号码
SELECT *
FROM table t
WHERE PATINDEX('%[0-9]X[^,]%', tele) > 0
为了只获得具有数字之前和之后的电话号码,然后格式可能会略有变化
PATINDEX('%[0-9]X[0-9]%', tele) > 0
答案 2 :(得分:0)
;WITH CTE AS
(
SELECT REPLACE(Tele,'/','') V, Tele , CHARINDEX('X',Tele,0) Ix
FROM tableName
)
SELECT Tele
FROM CTE
WHERE
TRY_CAST(SUBSTRING(V,0,Ix) AS BIGINT) IS NOT NULL AND SUBSTRING(V,0,Ix) <> ''
AND TRY_CAST(SUBSTRING(V,Ix+1,100) AS BIGINT) IS NOT NULL AND SUBSTRING(V,Ix+1,100) <> ''
答案 3 :(得分:0)
这将给出您要求的结果: -
SELECT *
FROM teble1
WHERE
TELP LIKE '%[0-9]X[0-9]%';