检查表时,用LIKE运算符代替IN运算符

时间:2018-06-22 15:06:49

标签: sql tsql sql-like insert-select

如果正在表中找到电话号码,我正在使用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运算符应用类似的逻辑,我可以对当前代码段进行任何修改吗?

3 个答案:

答案 0 :(得分: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 + '%')

答案 1 :(得分:1)

var selections;
$("#test").mousedown(function(e) {
  selections = $(this).val();

}).click(function() {

  if (selections == null) {
    var selected = -1;
    selections = [];
  } else
    var selected = selections.indexOf($.isArray($(this).val()) ? $(this).val()[$(this).val().length - 1] : $(this).val());

  if (selected >= 0)
    selections.splice(selected, 1);
  else
    selections.push($(this).val()[0]);

  $('#test option').each(function() {
    $(this).prop('selected', selections.indexOf($(this).val()) >= 0);
  });
});

答案 2 :(得分: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))