Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用通配符连接两个表列?_Sql_Ms Access_Jet - Fatal编程技术网

Sql 如何使用通配符连接两个表列?

Sql 如何使用通配符连接两个表列?,sql,ms-access,jet,Sql,Ms Access,Jet,我用的是Access 97 这就是我想做的: SELECT * FROM CodeDIS, ListOfProducts WHERE CodeDIS.IDNumber LIKE ListOfProducts.IDNumber*; 有时,产品列表上的IDNumber有一个额外的字母,表示产品的一些信息 所以我在CodeDIS上有ID号AC244,但在产品列表上有AC244P 我只想在条件的末尾添加一个通配符 这可能吗?如果选择C或p,为什么不: SELECT * FROM CodeDIS, Li

我用的是Access 97

这就是我想做的:

SELECT *
FROM CodeDIS, ListOfProducts
WHERE CodeDIS.IDNumber LIKE ListOfProducts.IDNumber*;
有时,产品列表上的IDNumber有一个额外的字母,表示产品的一些信息

所以我在CodeDIS上有ID号AC244,但在产品列表上有AC244P

我只想在条件的末尾添加一个通配符


这可能吗?

如果选择C或p,为什么不:

SELECT *
FROM CodeDIS, ListOfProducts
WHERE CodeDIS.IDNumber = ListOfProducts.IDNumber & "C"
OR CodeDIS.IDNumber = ListOfProducts.IDNumber & "P"
那么:

SELECT * 
FROM CodeDIS, ListOfProducts 
WHERE CodeDIS.IDNumber LIKE left(ListOfProducts.IDNumber,5); 
或者,如果您愿意:

SELECT * 
FROM CodeDIS a inner join ListOfProducts b on a.IDNumber = left(b.IDNumber,5); 

我知道这是旧的,但我没有张贴太多,如果有,我想我会尝试在这里

如果最后一个数字总是一个字符,为什么不在PATINDEX测试中使用子字符串函数呢?我确信我的代码效率很低,但我的初学者尝试了一下。我敢打赌,有些人会把我的陈述变成更小的东西

-- I used the code below
-- It only works if the final digit is lower or uppercase letter of 
-- specified language.
DECLARE @CodeDIS TABLE (IdNumber nvarchar(50), BaseRowNum nvarchar(50));

insert into @CodeDIS (IdNumber,BaseRowNum) values ('52352345','1')
insert into @CodeDIS (IdNumber,BaseRowNum) values ('134131','2')
insert into @CodeDIS (IdNumber,BaseRowNum) values ('1343141','3')
insert into @CodeDIS (IdNumber,BaseRowNum) values ('a143321','4')
insert into @CodeDIS (IdNumber,BaseRowNum) values ('c34324','5')
insert into @CodeDIS (IdNumber,BaseRowNum) values ('1343214','6')
insert into @CodeDIS (IdNumber,BaseRowNum) values ('%134324','7')
insert into @CodeDIS (IdNumber,BaseRowNum) values ('a%134324','8')
insert into @CodeDIS (IdNumber,BaseRowNum) values ('1413','9')
;
DECLARE @ListOfProducts TABLE (IdNumber nvarchar(50), UpdateSourceDataColumn nvarchar(50));

insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('52352345a','11')
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('134131','22')
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('1343141a','33')
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('a143321','44')
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('c343245','55')
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('1343214Z','66')
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('%134324','77')
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('a%134324','88')
insert into @ListOfProducts (IdNumber,UpdateSourceDataColumn) values ('1413\','99')
;
SELECT a.*,b.IdNumber as IdNumber2, b.UpdateSourceDataColumn
    FROM @CodeDIS a 
    left join @ListOfProducts b
    on a.IdNumber = 
      case 
        when PATINDEX(
          '[a-zA-Z]', 
          substring(b.IdNumber,len(b.IdNumber),1) 
          COLLATE Latin1_General_CS_AS
        )=1
        then left(b.IdNumber,len(b.IdNumber)-1)
        else b.IdNumber
      end
    ;     
--IdNumber  BaseRowNum  IdNumber2   UpdateSourceDataColumn
--52352345  1           52352345a   11
--134131    2           134131      22
--1343141   3           1343141a    33
--a143321   4           a143321     44
--c34324    5           NULL        NULL
--1343214   6           1343214Z    66
--%134324   7           %134324     77
--a%134324  8           a%134324    88
--1413      9           NULL        NULL

这是一个简单的解决方法=),但是CodeDIS应该使用新字母获取新值。TIL:在使用Access执行SQL语句时,可以使用left。这是一种功能性更强的解决方案,但我仍然不知道如何在Access 97中使用通配符。