strcomp可实现二进制比较,但是会同时区分大小写和全半角;
直接= <> 会不区分全半角,但也会不区分大小写.
请高手帮忙,在线等,谢谢!~
26 个解决方案
#1
在Jet SQL查询中,如何区分大小写?
原文:http://access911.net/fixhtm/73FAB31E14DC.htm
问题:
sql问题!
在写查询的时候如何区分大小写
注意:注意:
情况分两种,一种是我在 查询 设计器里面直接作
另一种是在vbe界面里面用 docmd.runsql "select * from where a like '*ddEE*'"
注意,这里的 like '*ddEE*' 是要求区分大小写的, 'ddee' 或者 'DDee' 不允许出现在查询结果中。
方法一:
请参考 StrComp inStr 这两个函数。
在LIKE操作中一般使用INSTR函数,该函数的说明请参考
InStr 函数
返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。
语法
InStr([start, ]string1, string2[, compare])
InStr 函数的语法具有下面的参数:
部分 说明
start 可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个字符的位置开始。如果 start 包含 Null,将发生错误。如果指定了 compare 参数,则一定要有 start 参数。
string1 必要参数。接受搜索的字符串表达式。
string2 必要参数。被搜索的字符串表达式。
Compare 可选参数。指定字符串比较。如果 compare 是 Null,将发生错误。如果省略 compare,Option Compare 的设置将决定比较的类型。指定一个有效的LCID (LocaleID) 以在比较中使用与区域有关的规则。
设置
compare 参数设置为:
常数 值 描述
vbUseCompareOption -1 使用Option Compare 语句设置执行一个比较。
vbBinaryCompare 0 执行一个二进制比较。
vbTextCompare 1 执行一个按照原文的比较。
vbDatabaseCompare 2 仅适用于Microsoft Access,执行一个基于数据库中信息的比较。
返回值
如果 InStr返回
string1 为零长度 0
string1 为 Null Null
string2 为零长度 Start
string2 为 Null Null
string2 找不到 0
在 string1 中找到string2 找到的位置
start > string2 0
说明
InStrB 函数作用于包含在字符串中的字节数据。所以 InStrB 返回的是字节位置,而不是字符位置。
一般可以这样:
select * from tablename where instr(1,fieldname,"字符",1)>0
方法二:
以下为MS的回答:
根据我的理解和经验,LIKE语句是不支持区分大小写的。但是,也许我们可以通过其它的方法来在一定程度上实现您所需要的功能。只能说是一定程度上,因为毕竟不可能像LIKE语句那么灵活的实现区分大小写
比如说:您希望实现类似LIKE “b*” 的功能,并且希望他是区分大小写的,我们可以这样写QUERY语句:
SELECT Customers.Name
FROM Customers
WHERE (((Asc([city]))>Asc("A") And (Asc([city]))<Asc("C")));
在这个语句中,我们通过 ASC 返回字符串首字母的ASCII码,然后再进行判断。
如果你希望能够实现类似于LIKE “abc*”的功能,并且希望他是区分大小写的,我们可以这样考虑QUERY语句:
SELECT Customers.City
FROM Customers
WHERE (((StrComp([city],"abc",0))=1)) AND (((Asc([city]))>Asc("a") And (Asc([city]))<Asc("c")));
通过上面的例子您可以看出,虽然我们能够通过变通的方法来实现查询中对于大小写的区分,但是相对来说是比较复杂的,还可能会造成一定性能的影响。并且如果您不能够正确判断所有可能出现的情况的话,查询得到的结果可能会是不正确的(比如,我希望实现LIKE “?a??A*”就非常难以判断了)。
更加详细的说明和帮助您可以参看
ACC2000: How to Return Case-Sensitive Matches in Queries
http://support.microsoft.com/?id=209674
原文:http://access911.net/fixhtm/73FAB31E14DC.htm
问题:
sql问题!
在写查询的时候如何区分大小写
注意:注意:
情况分两种,一种是我在 查询 设计器里面直接作
另一种是在vbe界面里面用 docmd.runsql "select * from where a like '*ddEE*'"
注意,这里的 like '*ddEE*' 是要求区分大小写的, 'ddee' 或者 'DDee' 不允许出现在查询结果中。
方法一:
请参考 StrComp inStr 这两个函数。
在LIKE操作中一般使用INSTR函数,该函数的说明请参考
InStr 函数
返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。
语法
InStr([start, ]string1, string2[, compare])
InStr 函数的语法具有下面的参数:
部分 说明
start 可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个字符的位置开始。如果 start 包含 Null,将发生错误。如果指定了 compare 参数,则一定要有 start 参数。
string1 必要参数。接受搜索的字符串表达式。
string2 必要参数。被搜索的字符串表达式。
Compare 可选参数。指定字符串比较。如果 compare 是 Null,将发生错误。如果省略 compare,Option Compare 的设置将决定比较的类型。指定一个有效的LCID (LocaleID) 以在比较中使用与区域有关的规则。
设置
compare 参数设置为:
常数 值 描述
vbUseCompareOption -1 使用Option Compare 语句设置执行一个比较。
vbBinaryCompare 0 执行一个二进制比较。
vbTextCompare 1 执行一个按照原文的比较。
vbDatabaseCompare 2 仅适用于Microsoft Access,执行一个基于数据库中信息的比较。
返回值
如果 InStr返回
string1 为零长度 0
string1 为 Null Null
string2 为零长度 Start
string2 为 Null Null
string2 找不到 0
在 string1 中找到string2 找到的位置
start > string2 0
说明
InStrB 函数作用于包含在字符串中的字节数据。所以 InStrB 返回的是字节位置,而不是字符位置。
一般可以这样:
select * from tablename where instr(1,fieldname,"字符",1)>0
方法二:
以下为MS的回答:
根据我的理解和经验,LIKE语句是不支持区分大小写的。但是,也许我们可以通过其它的方法来在一定程度上实现您所需要的功能。只能说是一定程度上,因为毕竟不可能像LIKE语句那么灵活的实现区分大小写
比如说:您希望实现类似LIKE “b*” 的功能,并且希望他是区分大小写的,我们可以这样写QUERY语句:
SELECT Customers.Name
FROM Customers
WHERE (((Asc([city]))>Asc("A") And (Asc([city]))<Asc("C")));
在这个语句中,我们通过 ASC 返回字符串首字母的ASCII码,然后再进行判断。
如果你希望能够实现类似于LIKE “abc*”的功能,并且希望他是区分大小写的,我们可以这样考虑QUERY语句:
SELECT Customers.City
FROM Customers
WHERE (((StrComp([city],"abc",0))=1)) AND (((Asc([city]))>Asc("a") And (Asc([city]))<Asc("c")));
通过上面的例子您可以看出,虽然我们能够通过变通的方法来实现查询中对于大小写的区分,但是相对来说是比较复杂的,还可能会造成一定性能的影响。并且如果您不能够正确判断所有可能出现的情况的话,查询得到的结果可能会是不正确的(比如,我希望实现LIKE “?a??A*”就非常难以判断了)。
更加详细的说明和帮助您可以参看
ACC2000: How to Return Case-Sensitive Matches in Queries
http://support.microsoft.com/?id=209674
#2
SELECT * FROM 表 WHERE instr(1,fieldname,"g",0)>0
#3
SELECT * FROM 表 WHERE instr(1,fieldname,"大小写字符",0)>0
#4
最主要的是全半角,将字符全部转换为大(ucase)OR 小写(lcase)就可以了嘛。
#5
最主要的是全半角,将字符全部转换为大(ucase)OR 小写(lcase)就可以解决大小写问题。
#6
按照911的方法,用参数1(vbTextCompare),下面的语句我的电脑测试不成功
select * from tablename where instr(1,fieldname,"字符",1)>0
需改为参数0(执行一个二进制比较)
select * from tablename where instr(1,fieldname,"字符",0)>0
select * from tablename where instr(1,fieldname,"字符",1)>0
需改为参数0(执行一个二进制比较)
select * from tablename where instr(1,fieldname,"字符",0)>0
#7
谢谢各位;
请各位看清楚我的问题是:
不区分全半角;但同时,区分大小写!
再说仔细点,我想查询某个表中是否有AbC之外的非法数据;
因此abc是非法数据,但AbC是合法数据, instr估计是用不上. 先试试,谢谢!
WWWWA 说的是不区分大小写的情况.
下午一直上不了csdn,不好意思!
请各位看清楚我的问题是:
不区分全半角;但同时,区分大小写!
再说仔细点,我想查询某个表中是否有AbC之外的非法数据;
因此abc是非法数据,但AbC是合法数据, instr估计是用不上. 先试试,谢谢!
WWWWA 说的是不区分大小写的情况.
下午一直上不了csdn,不好意思!
#8
我写了个通用函数判断是否有非法值;
其中有两个参数:是否区分大小写 和 是否区分全半角
两两组合有四种情况,现在只有 不区分全半角但区分大小写 未实现; 其他三种都已经实现成功.
其中有两个参数:是否区分大小写 和 是否区分全半角
两两组合有四种情况,现在只有 不区分全半角但区分大小写 未实现; 其他三种都已经实现成功.
#9
区分大小写:是整个记录内容(AbC)还是拆分为单个字母时(A、b、C)?
#10
整个内容. 就是abc时ABC也满足,AbC也满足
#11
没人会么?
#12
你是区分大小写,还是不区分大小写
#13
Function Test(StrWhere As String)
' StrWhere 为条件参数
'示例: Test "g" 列举T1表中F1字段中全角半角中"g"的数据,但不包括大写G
Dim Rs As New ADODB.Recordset
Dim Str As String
Dim I As Integer
Dim IntLen As Integer
Dim Tem As String
Rs.Open "select * from T1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do While Not Rs.EOF
Str = ""
IntLen = Len(Rs.Fields("F1"))
Tem = Rs.Fields("F1")
For I = 1 To IntLen
If Asc(Mid(Tem, I, 1)) < 0 Then
Str = Str & Chr(Asc(Mid(Tem, I, 1)) + 23680)
Else
Str = Str & Mid(Tem, I, 1)
End If
Next
If InStr(1, Str, StrWhere, vbBinaryCompare) > 0 Then
Debug.Print Tem
End If
Rs.MoveNext
Loop
Rs.Close
End Function
' StrWhere 为条件参数
'示例: Test "g" 列举T1表中F1字段中全角半角中"g"的数据,但不包括大写G
Dim Rs As New ADODB.Recordset
Dim Str As String
Dim I As Integer
Dim IntLen As Integer
Dim Tem As String
Rs.Open "select * from T1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do While Not Rs.EOF
Str = ""
IntLen = Len(Rs.Fields("F1"))
Tem = Rs.Fields("F1")
For I = 1 To IntLen
If Asc(Mid(Tem, I, 1)) < 0 Then
Str = Str & Chr(Asc(Mid(Tem, I, 1)) + 23680)
Else
Str = Str & Mid(Tem, I, 1)
End If
Next
If InStr(1, Str, StrWhere, vbBinaryCompare) > 0 Then
Debug.Print Tem
End If
Rs.MoveNext
Loop
Rs.Close
End Function
#14
to ewang11 :
你这是代码实现了,我想通过sql来实现. 用代码的话我就不用来问了.
不区分全半角, 区分大小写. 上面的例子举错了,抱歉!
ABC 只匹配ABC, 不匹配Abc/aBC; 但匹配ABC ABC. 见标题,谢谢!
你这是代码实现了,我想通过sql来实现. 用代码的话我就不用来问了.
不区分全半角, 区分大小写. 上面的例子举错了,抱歉!
ABC 只匹配ABC, 不匹配Abc/aBC; 但匹配ABC ABC. 见标题,谢谢!
#15
有点糊涂了,到底你需要什么样的结果?
abc aBC abC
Abc ABC ABc
匹配哪些?
abc aBC abC
Abc ABC ABc
匹配哪些?
#16
可能举例举乱了. 就看标题吧.
符合标题就可以了.
abc aBC abC
Abc ABC ABc
ABC ABC aBC
比如我想搜ABC,那ABC ABC ABC 都满足.其他的不满足 区分大小写,不区分全半角.
符合标题就可以了.
abc aBC abC
Abc ABC ABc
ABC ABC aBC
比如我想搜ABC,那ABC ABC ABC 都满足.其他的不满足 区分大小写,不区分全半角.
#17
这个例子是回答你说的整句匹配还是单字符匹配时举的,不符合标题,是错误的.
#18
也就是说字母不区分全半角,空格不区分全半角?
#19
是这样子的. 帮我想想办法吧. 谢谢啦!
若实在不行就只好代码解决了.
若实在不行就只好代码解决了.
#20
不用考虑所有的全半角, 只字母和数字就可以了. 符号都不用考虑
#21
筛选AbC的记录(区分大小写,不分全角半角)
SELECT T1.ID, T1.F1
FROM T1
WHERE instr(1,replace(replace(REPLACE(F1,"A","A",1,-1,0),"b","b",1,-1,0),"C","C",1,-1,0),"AbC",0)>0;
SELECT T1.ID, T1.F1
FROM T1
WHERE instr(1,replace(replace(REPLACE(F1,"A","A",1,-1,0),"b","b",1,-1,0),"C","C",1,-1,0),"AbC",0)>0;
#22
谢谢您为我提供解决问题的一种方法.
这样未免太刻板了吧?
若我字符串100个字,我岂非得嵌套100个replace,再考虑26个全角大写英文字母,26个全角小写字母,10个全角数字....
谢谢!提前祝两位大虾周末愉快,周一见! 为感谢两位的帮助,我结贴时会加分到100.
#23
用代码生成临时查询比较方面一点
#24
若我字符串100个字,我岂非得嵌套100个replace,再考虑26个全角大写英文字母,26个全角小写字母,10个全角数字....
这种情况只有用代码了,将所有全角->半角,去掉空格,再做判断
这种情况只有用代码了,将所有全角->半角,去掉空格,再做判断
#25
呃. 我就是懒得用代码才想sql能否实现. 看样子还是不行的呀.
谢谢两位的帮助!JT
谢谢两位的帮助!JT
#26
取ASCII行么?逐一取ASCII,再用ASCII比较,我知道这能解决大小写问题,但是不知道能否解决全半角问题
#1
在Jet SQL查询中,如何区分大小写?
原文:http://access911.net/fixhtm/73FAB31E14DC.htm
问题:
sql问题!
在写查询的时候如何区分大小写
注意:注意:
情况分两种,一种是我在 查询 设计器里面直接作
另一种是在vbe界面里面用 docmd.runsql "select * from where a like '*ddEE*'"
注意,这里的 like '*ddEE*' 是要求区分大小写的, 'ddee' 或者 'DDee' 不允许出现在查询结果中。
方法一:
请参考 StrComp inStr 这两个函数。
在LIKE操作中一般使用INSTR函数,该函数的说明请参考
InStr 函数
返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。
语法
InStr([start, ]string1, string2[, compare])
InStr 函数的语法具有下面的参数:
部分 说明
start 可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个字符的位置开始。如果 start 包含 Null,将发生错误。如果指定了 compare 参数,则一定要有 start 参数。
string1 必要参数。接受搜索的字符串表达式。
string2 必要参数。被搜索的字符串表达式。
Compare 可选参数。指定字符串比较。如果 compare 是 Null,将发生错误。如果省略 compare,Option Compare 的设置将决定比较的类型。指定一个有效的LCID (LocaleID) 以在比较中使用与区域有关的规则。
设置
compare 参数设置为:
常数 值 描述
vbUseCompareOption -1 使用Option Compare 语句设置执行一个比较。
vbBinaryCompare 0 执行一个二进制比较。
vbTextCompare 1 执行一个按照原文的比较。
vbDatabaseCompare 2 仅适用于Microsoft Access,执行一个基于数据库中信息的比较。
返回值
如果 InStr返回
string1 为零长度 0
string1 为 Null Null
string2 为零长度 Start
string2 为 Null Null
string2 找不到 0
在 string1 中找到string2 找到的位置
start > string2 0
说明
InStrB 函数作用于包含在字符串中的字节数据。所以 InStrB 返回的是字节位置,而不是字符位置。
一般可以这样:
select * from tablename where instr(1,fieldname,"字符",1)>0
方法二:
以下为MS的回答:
根据我的理解和经验,LIKE语句是不支持区分大小写的。但是,也许我们可以通过其它的方法来在一定程度上实现您所需要的功能。只能说是一定程度上,因为毕竟不可能像LIKE语句那么灵活的实现区分大小写
比如说:您希望实现类似LIKE “b*” 的功能,并且希望他是区分大小写的,我们可以这样写QUERY语句:
SELECT Customers.Name
FROM Customers
WHERE (((Asc([city]))>Asc("A") And (Asc([city]))<Asc("C")));
在这个语句中,我们通过 ASC 返回字符串首字母的ASCII码,然后再进行判断。
如果你希望能够实现类似于LIKE “abc*”的功能,并且希望他是区分大小写的,我们可以这样考虑QUERY语句:
SELECT Customers.City
FROM Customers
WHERE (((StrComp([city],"abc",0))=1)) AND (((Asc([city]))>Asc("a") And (Asc([city]))<Asc("c")));
通过上面的例子您可以看出,虽然我们能够通过变通的方法来实现查询中对于大小写的区分,但是相对来说是比较复杂的,还可能会造成一定性能的影响。并且如果您不能够正确判断所有可能出现的情况的话,查询得到的结果可能会是不正确的(比如,我希望实现LIKE “?a??A*”就非常难以判断了)。
更加详细的说明和帮助您可以参看
ACC2000: How to Return Case-Sensitive Matches in Queries
http://support.microsoft.com/?id=209674
原文:http://access911.net/fixhtm/73FAB31E14DC.htm
问题:
sql问题!
在写查询的时候如何区分大小写
注意:注意:
情况分两种,一种是我在 查询 设计器里面直接作
另一种是在vbe界面里面用 docmd.runsql "select * from where a like '*ddEE*'"
注意,这里的 like '*ddEE*' 是要求区分大小写的, 'ddee' 或者 'DDee' 不允许出现在查询结果中。
方法一:
请参考 StrComp inStr 这两个函数。
在LIKE操作中一般使用INSTR函数,该函数的说明请参考
InStr 函数
返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。
语法
InStr([start, ]string1, string2[, compare])
InStr 函数的语法具有下面的参数:
部分 说明
start 可选参数。为数值表达式,设置每次搜索的起点。如果省略,将从第一个字符的位置开始。如果 start 包含 Null,将发生错误。如果指定了 compare 参数,则一定要有 start 参数。
string1 必要参数。接受搜索的字符串表达式。
string2 必要参数。被搜索的字符串表达式。
Compare 可选参数。指定字符串比较。如果 compare 是 Null,将发生错误。如果省略 compare,Option Compare 的设置将决定比较的类型。指定一个有效的LCID (LocaleID) 以在比较中使用与区域有关的规则。
设置
compare 参数设置为:
常数 值 描述
vbUseCompareOption -1 使用Option Compare 语句设置执行一个比较。
vbBinaryCompare 0 执行一个二进制比较。
vbTextCompare 1 执行一个按照原文的比较。
vbDatabaseCompare 2 仅适用于Microsoft Access,执行一个基于数据库中信息的比较。
返回值
如果 InStr返回
string1 为零长度 0
string1 为 Null Null
string2 为零长度 Start
string2 为 Null Null
string2 找不到 0
在 string1 中找到string2 找到的位置
start > string2 0
说明
InStrB 函数作用于包含在字符串中的字节数据。所以 InStrB 返回的是字节位置,而不是字符位置。
一般可以这样:
select * from tablename where instr(1,fieldname,"字符",1)>0
方法二:
以下为MS的回答:
根据我的理解和经验,LIKE语句是不支持区分大小写的。但是,也许我们可以通过其它的方法来在一定程度上实现您所需要的功能。只能说是一定程度上,因为毕竟不可能像LIKE语句那么灵活的实现区分大小写
比如说:您希望实现类似LIKE “b*” 的功能,并且希望他是区分大小写的,我们可以这样写QUERY语句:
SELECT Customers.Name
FROM Customers
WHERE (((Asc([city]))>Asc("A") And (Asc([city]))<Asc("C")));
在这个语句中,我们通过 ASC 返回字符串首字母的ASCII码,然后再进行判断。
如果你希望能够实现类似于LIKE “abc*”的功能,并且希望他是区分大小写的,我们可以这样考虑QUERY语句:
SELECT Customers.City
FROM Customers
WHERE (((StrComp([city],"abc",0))=1)) AND (((Asc([city]))>Asc("a") And (Asc([city]))<Asc("c")));
通过上面的例子您可以看出,虽然我们能够通过变通的方法来实现查询中对于大小写的区分,但是相对来说是比较复杂的,还可能会造成一定性能的影响。并且如果您不能够正确判断所有可能出现的情况的话,查询得到的结果可能会是不正确的(比如,我希望实现LIKE “?a??A*”就非常难以判断了)。
更加详细的说明和帮助您可以参看
ACC2000: How to Return Case-Sensitive Matches in Queries
http://support.microsoft.com/?id=209674
#2
SELECT * FROM 表 WHERE instr(1,fieldname,"g",0)>0
#3
SELECT * FROM 表 WHERE instr(1,fieldname,"大小写字符",0)>0
#4
最主要的是全半角,将字符全部转换为大(ucase)OR 小写(lcase)就可以了嘛。
#5
最主要的是全半角,将字符全部转换为大(ucase)OR 小写(lcase)就可以解决大小写问题。
#6
按照911的方法,用参数1(vbTextCompare),下面的语句我的电脑测试不成功
select * from tablename where instr(1,fieldname,"字符",1)>0
需改为参数0(执行一个二进制比较)
select * from tablename where instr(1,fieldname,"字符",0)>0
select * from tablename where instr(1,fieldname,"字符",1)>0
需改为参数0(执行一个二进制比较)
select * from tablename where instr(1,fieldname,"字符",0)>0
#7
谢谢各位;
请各位看清楚我的问题是:
不区分全半角;但同时,区分大小写!
再说仔细点,我想查询某个表中是否有AbC之外的非法数据;
因此abc是非法数据,但AbC是合法数据, instr估计是用不上. 先试试,谢谢!
WWWWA 说的是不区分大小写的情况.
下午一直上不了csdn,不好意思!
请各位看清楚我的问题是:
不区分全半角;但同时,区分大小写!
再说仔细点,我想查询某个表中是否有AbC之外的非法数据;
因此abc是非法数据,但AbC是合法数据, instr估计是用不上. 先试试,谢谢!
WWWWA 说的是不区分大小写的情况.
下午一直上不了csdn,不好意思!
#8
我写了个通用函数判断是否有非法值;
其中有两个参数:是否区分大小写 和 是否区分全半角
两两组合有四种情况,现在只有 不区分全半角但区分大小写 未实现; 其他三种都已经实现成功.
其中有两个参数:是否区分大小写 和 是否区分全半角
两两组合有四种情况,现在只有 不区分全半角但区分大小写 未实现; 其他三种都已经实现成功.
#9
区分大小写:是整个记录内容(AbC)还是拆分为单个字母时(A、b、C)?
#10
整个内容. 就是abc时ABC也满足,AbC也满足
#11
没人会么?
#12
你是区分大小写,还是不区分大小写
#13
Function Test(StrWhere As String)
' StrWhere 为条件参数
'示例: Test "g" 列举T1表中F1字段中全角半角中"g"的数据,但不包括大写G
Dim Rs As New ADODB.Recordset
Dim Str As String
Dim I As Integer
Dim IntLen As Integer
Dim Tem As String
Rs.Open "select * from T1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do While Not Rs.EOF
Str = ""
IntLen = Len(Rs.Fields("F1"))
Tem = Rs.Fields("F1")
For I = 1 To IntLen
If Asc(Mid(Tem, I, 1)) < 0 Then
Str = Str & Chr(Asc(Mid(Tem, I, 1)) + 23680)
Else
Str = Str & Mid(Tem, I, 1)
End If
Next
If InStr(1, Str, StrWhere, vbBinaryCompare) > 0 Then
Debug.Print Tem
End If
Rs.MoveNext
Loop
Rs.Close
End Function
' StrWhere 为条件参数
'示例: Test "g" 列举T1表中F1字段中全角半角中"g"的数据,但不包括大写G
Dim Rs As New ADODB.Recordset
Dim Str As String
Dim I As Integer
Dim IntLen As Integer
Dim Tem As String
Rs.Open "select * from T1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do While Not Rs.EOF
Str = ""
IntLen = Len(Rs.Fields("F1"))
Tem = Rs.Fields("F1")
For I = 1 To IntLen
If Asc(Mid(Tem, I, 1)) < 0 Then
Str = Str & Chr(Asc(Mid(Tem, I, 1)) + 23680)
Else
Str = Str & Mid(Tem, I, 1)
End If
Next
If InStr(1, Str, StrWhere, vbBinaryCompare) > 0 Then
Debug.Print Tem
End If
Rs.MoveNext
Loop
Rs.Close
End Function
#14
to ewang11 :
你这是代码实现了,我想通过sql来实现. 用代码的话我就不用来问了.
不区分全半角, 区分大小写. 上面的例子举错了,抱歉!
ABC 只匹配ABC, 不匹配Abc/aBC; 但匹配ABC ABC. 见标题,谢谢!
你这是代码实现了,我想通过sql来实现. 用代码的话我就不用来问了.
不区分全半角, 区分大小写. 上面的例子举错了,抱歉!
ABC 只匹配ABC, 不匹配Abc/aBC; 但匹配ABC ABC. 见标题,谢谢!
#15
有点糊涂了,到底你需要什么样的结果?
abc aBC abC
Abc ABC ABc
匹配哪些?
abc aBC abC
Abc ABC ABc
匹配哪些?
#16
可能举例举乱了. 就看标题吧.
符合标题就可以了.
abc aBC abC
Abc ABC ABc
ABC ABC aBC
比如我想搜ABC,那ABC ABC ABC 都满足.其他的不满足 区分大小写,不区分全半角.
符合标题就可以了.
abc aBC abC
Abc ABC ABc
ABC ABC aBC
比如我想搜ABC,那ABC ABC ABC 都满足.其他的不满足 区分大小写,不区分全半角.
#17
这个例子是回答你说的整句匹配还是单字符匹配时举的,不符合标题,是错误的.
#18
也就是说字母不区分全半角,空格不区分全半角?
#19
是这样子的. 帮我想想办法吧. 谢谢啦!
若实在不行就只好代码解决了.
若实在不行就只好代码解决了.
#20
不用考虑所有的全半角, 只字母和数字就可以了. 符号都不用考虑
#21
筛选AbC的记录(区分大小写,不分全角半角)
SELECT T1.ID, T1.F1
FROM T1
WHERE instr(1,replace(replace(REPLACE(F1,"A","A",1,-1,0),"b","b",1,-1,0),"C","C",1,-1,0),"AbC",0)>0;
SELECT T1.ID, T1.F1
FROM T1
WHERE instr(1,replace(replace(REPLACE(F1,"A","A",1,-1,0),"b","b",1,-1,0),"C","C",1,-1,0),"AbC",0)>0;
#22
谢谢您为我提供解决问题的一种方法.
这样未免太刻板了吧?
若我字符串100个字,我岂非得嵌套100个replace,再考虑26个全角大写英文字母,26个全角小写字母,10个全角数字....
谢谢!提前祝两位大虾周末愉快,周一见! 为感谢两位的帮助,我结贴时会加分到100.
#23
用代码生成临时查询比较方面一点
#24
若我字符串100个字,我岂非得嵌套100个replace,再考虑26个全角大写英文字母,26个全角小写字母,10个全角数字....
这种情况只有用代码了,将所有全角->半角,去掉空格,再做判断
这种情况只有用代码了,将所有全角->半角,去掉空格,再做判断
#25
呃. 我就是懒得用代码才想sql能否实现. 看样子还是不行的呀.
谢谢两位的帮助!JT
谢谢两位的帮助!JT
#26
取ASCII行么?逐一取ASCII,再用ASCII比较,我知道这能解决大小写问题,但是不知道能否解决全半角问题