LIKE SQL MS Access解决方案

时间:2015-05-24 23:54:49

标签: sql access-vba ms-access-2010

我在这个SQL中遇到了我的LIKE问题。我不确定这是否可以修复。我已经找到了一切可能的方式让LIKE以我希望的方式工作,但似乎无法找到解决方案。我的问题是,字段[program]在表CFRRR(这是a和b得到它们的值)中的写法并不完全相同,因为它是在表格出勤中写的。例如:在表格中,CFRRR程序可以是CW / CF或MC / CF或只是CW等。但在表格考勤方面可以写成CW / MC / CF.因此,代码没有选择记录。

代码是否可以读取两者都有CW或者两者都有值?

a = Program
b = language


Set db = CurrentDb

strSQL = "SELECT TOP 1 userID 
          FROM attendance 
          where attendance.Programs LIKE '%" & a & "'
            AND attendance.Language LIKE '*" & b & "*'
            AND attendance.Status = 'Available'
            AND attendance.Tracking = 0"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

1 个答案:

答案 0 :(得分:0)

你需要一个"包含"功能,因为LIKE你无法做你想做的事。您必须先划分搜索字词,然后才能使用" /"拆分它们的符号。例如关键" CW / CF"需要在搜索术语中分割(请参阅vba split函数)" CW"和" CF" (同样适用于语言)。然后使用SQl通过LIKE "*searchTerm*"每个搜索字词查找。您可能需要动态构建SQL字符串(使用for...next并循环使用split函数生成的Array)。 函数的结果就是这个(在这种情况下" a"有两个术语和" b"还有两个术语,所以数组从0变为1):

"SELECT TOP 1 userID 
      FROM attendance 
      where Programs LIKE '*" & termP(0) & "*' AND " & _
           "Programs LIKE '*" & termP(1) & "*' AND " & _
           "languaje LIKE '*" & termL(0) & "*' AND " & _
           "languaje LIKE '*" & termL(1) & "*' " & _
        AND attendance.Status = 'Available'
        AND attendance.Tracking = 0"

您可以将实际值放在SQl字符串中,而不是数组位置。

或者你可以为你的桌子想一个更好的结构。