1

如果在表格中找到电话号码,我正在编写一个 SQL 脚本来添加客户的 ID。

下面是我的代码片段:

CREATE TABLE #Customers ( AccountNumber nvarchar(20))
CREATE TABLE #Phones ( Number nvarchar(30))

INSERT INTO #Customers (AccountNumber)
    SELECT AccountNumber
    FROM CustomerTable
    WHERE 
        (CustomerTable.PhoneNumber IN (SELECT DISTINCT Number FROM #Phones))
        OR
        (CustomerTable.PhoneNumber2 IN (SELECT DISTINCT Number FROM #Phones))
GO

但是,使用这些语句,我只能检查表中是否满足确切的记录。例如:如果Phones.Number有记录'123456',CustomerTables.PhoneNumber有记录'123456 7',则即使包含号码,也不会获取此记录记录。

他们是否可以对我当前的代码片段进行任何修改,以便将类似的逻辑应用于 LIKE 运算符?

4

3 回答 3

4

这不能直接使用in运算符完成,但使用exists运算符内部的查询应该可以解决问题:

INSERT INTO #Customers (AccountNumber)
SELECT AccountNumber
FROM   CustomerTable ct
WHERE  EXISTS (SELECT *
               FROM   #Phones p
               WHERE  ct.PhoneNumber LIKE '%' + p.Number + '%' OR
                      ct.PhoneNumber2 LIKE '%' + p.Number + '%')
于 2018-06-22T15:11:13.973 回答
1
SELECT AccountNumber
FROM CustomerTable c 
join #Phones p
  on c.PhoneNumber like p.Number + '%' OR c.PhoneNumber2  like p.Number + '%'
于 2018-06-22T15:22:07.117 回答
0

我认为这也可以,但我还没有测试过。

WITH Customers AS 
     (
        SELECT AccountNumber , Len(PhoneNumber) as PhoneSize
        FROM  
     )
INSERT INTO #Customers (AccountNumber)
SELECT AccountNumber
FROM CustomerTable a
Join Customers b on a.AccountNumber = b.AccountNumber
WHERE 
(CustomerTable.PhoneNumber IN (SELECT DISTINCT LEft(Number,b.PhoneSize) FROM #Phones))
OR
(CustomerTable.PhoneNumber2 IN (SELECT DISTINCT LEft(Number,b.PhoneSize) FROM #Phones))
于 2018-06-22T15:15:47.973 回答