1

アクセス97を使用しています。

これは私がやりたいことです:

SELECT *
FROM CodeDIS, ListOfProducts
WHERE CodeDIS.IDNumber LIKE ListOfProducts.IDNumber*;

ListOfProducts の IDNumber には、製品に関する情報を示す追加の文字が含まれていることがあります。

したがって、CodeDIS には IDNumber AC244 がありますが、ListOfProducts には AC244P があります。

条件の最後にワイルドカードを追加するだけです。

これは可能ですか?

4

3 に答える 3

1

どうですか:

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); 
于 2012-08-29T19:34:35.837 に答える
1

選択肢が C または P の場合、次の理由はありません。

SELECT *
FROM CodeDIS, ListOfProducts
WHERE CodeDIS.IDNumber = ListOfProducts.IDNumber & "C"
OR CodeDIS.IDNumber = ListOfProducts.IDNumber & "P"
于 2012-08-29T19:25:41.357 に答える
1

これが古いことは知っていますが、これまであまり投稿していなかったので、ここで試してみようと思いました.

最後の桁が常に文字である場合、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
于 2016-09-16T21:26:02.443 に答える