這是Access數據庫
name_A,name_B,name_C都是由多個name組成分別用逗號加空格隔開。
1. name_A 和 name_B中都有的table1 的記錄 (下面是別人告訴我的答案,可以用)
select * from table1 where instr(', '+name_b+', ',', 你你, ')>0 and instr(', '+name_a+', ',', 你你, ')>0
2. name_A中有而name_B中沒有的table1 的記錄 (請告訴我,如何用上面同樣的方法改成滿足這個需要的sql語句)
3. name_A 和 name_C中都有的table1 的記錄 (下面是別人告訴我的答案,可以用)
select * from table1 t1 inner join table2 t2 on t1.id=t2.table1_id and instr(', '+name_a+', ',', '+t2.name_c+', ')>0 where t2.name_c='444'
4. name_A中有而name_C中沒有的table1 的記錄 (請告訴我,如何用上面同樣的方法改成滿足這個需要的sql語句)
還有,我不想改變數據形式
8 个解决方案
2.
select * from table1 where instr(', '+name_b+', ',', 你你, ')> 0 and instr(', '+name_a+', ',', 你你, ')= 0
4.
select * from table1 t1 inner join table2 t2 on t1.id=t2.table1_id and instr(', '+name_a+', ',', '+t2.name_c+', ')= 0 where t2.name_c='444'
那我再問一個問題,
5.name_A和name_B中都有而name_C中沒有的table1的記錄
6.name_A和name_B,name_C三個中都有的table1的記錄
beyondamane
你寫的這個函數可一用在sql語句中嗎?
instr 可以改成like,mssql中也可以用charindex.
解決這個問題的關鍵在於把已有字段構造成更有利的字段進行查詢
比如字段內容:444, 你你, 我我==>, 444, 你你, 我我,
需要查詢的內容:你你==>, 你你,
444==>, 444,
這樣做查詢就會相對簡單而准確,是沒有問題的,4#的沒有理解清楚.
access 中的instr跟vbs中的instr用法雷同
InStr([start, ]string1, string2[, compare])
InStr 函數的語法有以下參數:
參數 描述
start 可選。數值表達式,用於設置每次搜索的開始位置。如果省略,將從第一個字符的位置開始搜索。如果 start 包含 Null,則會出現錯誤。如果已指定 compare,則必須要有 start 參數。
string1 必選。接受搜索的字符串表達式。
string2 必選。要搜索的字符串表達式。
compare 可選。指示在計算子字符串時使用的比較類型的數值。有關數值,請參閱“設置”部分。如果省略,將執行二進制比較。
設置
compare 參數可以有以下值:
常數 值 描述
vbBinaryCompare 0 執行二進制比較。
vbTextCompare 1 執行文本比較。
返回值
InStr 函數返回以下值:
如果 InStr 返回
string1 為零長度 0
string1 為 Null Null
string2 為零長度 start
string2 為 Null Null
string2 沒有找到 0
在 string1 中找到 string2 找到匹配字符串的位置
start > Len(string2) 0
說明
下面的示例利用 InStr 搜索字符串:
Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP" ' 要在其中搜索的字符串。
SearchChar = "P" ' 搜索 "P"。
'文本比較從第四個字符開始返回 6。
MyPos = Instr(4, SearchString, SearchChar, 1)
'二進制比較從第1個字符開始返回 9。
MyPos = Instr(1, SearchString, SearchChar, 0)
' 缺省為二進制比較(最后一個參數省略)。
MyPos = Instr(SearchString, SearchChar) ' 返回 9。
' 二進制比較從第1個字符開始返回 0 (沒有找到 "W")。
MyPos = Instr(1, SearchString, "W")