我用ADOQuery写SQL语句,用like条件语句进行判断并要求区分大小写,可实际返回的结果不区分大小写,曾经看到一个朋友说用inStr,但仍无法解决,因为我的表很特殊,如下:
field1        field2         (表table1)    
Si            发送
Ti            接收
I%            网通
s%            主叫
y%            直通
S%            被叫
%y            优惠
%i            连通

当字段field1的值为Si时对应'发送',值为Ti时对应'接收',值以I开头时对应'网通',值以s开头时对应'主叫',值以y开头时对应'直通车',值以S开头时对应'被叫',值以y结尾时对应'优惠',值以i结尾时对应'连通',等等。我的SQL语句为:ADOQuery1.sql.Add('select (select top 1 table1.field2 from table1 where table2.code like table1.field1) as codename from table2 ');
可惜查得的结果没有区分大小写(如:把S错误的对应到了'主叫')。其中表table1是我为了利用like语句而自建的,可以调整,但S对应'被叫'等对应关系都不允许更改。 
有高手能解决上述问题吗?急用,万分感谢!!!

解决方案 »

  1.   

    直接的办法就是在安装SQLServer的时候在自定义的时候,选排序方式的时候选中区分大小写
      

  2.   

    SQL在查询时如楼上哪位说的可以自定义大小。但那样太麻烦,我想到一个办法,在查询结果中字段是区分了大小写的。可以把查询结果中的字段值用字符串类型替换后,再进行字符串大小写的比较。
    那时想大就大,想小就小了,以上意见仅供参考。
      

  3.   

    最烂的方法:
    查询完后用COPY函数判断一下
    with ADOQuery1 do
    begin
       first;
       while not eof do
       begin
          if Copy(FieldByName('field1').asstring,1,1)='s' then
             begin
                ... ...
             end
          else if Copy(FieldByName('field1').asstring,1,1)='S' then
             begin
                ... ...
             end;
          next;
        end;
    end;
      

  4.   

    在服务器设都没有用的,因Si∈S%,si∈s%
    因为S%是表示所有以S开的数据,Si也在内啊。
    因为s%是表示所有以s开的数据,si也在内啊。
    所以在这个数据要求上的,这个数据设计是不对的。
    使用一下SQL过程吧,要不就使用数据本地处理吧。
      

  5.   

    我是楼主,另外补充两点:1,我的库是ACCESS,好象没有区分大小写的设置 2,对于表table1的匹配是自上而下的,即只要第一条满足就结束。对tonycjl朋友:
        你说的用SQL过程或数据本地处理具体该如何操作呢?能详细说说或给个例子吗?谢谢!lxh00789朋友:
        我的field1字段本来就是字符串类型呀,你说的是什么意思呢?
      

  6.   

    function AnsiCompareStr(const S1, S2: string): Integer;DescriptionAnsiCompareStr compares S1 to S2, with case sensitivity. The compare operation is controlled by the current locale. The return value is:Condition Return Value
    S1 > S2 > 0
    S1 < S2 < 0
    S1 = S2 = 0
    Note: Most locales consider lowercase characters to be less than the corresponding uppercase characters.  This is in contrast to ASCII order, in which lowercase characters are greater than uppercase characters.  Thus,AnsiCompareStr('a','A')
    returns a value less than zero, while 
    CompareStr('a','A')
    returns a value greater than zero.
      

  7.   

    首部 function AnsiSameStr(const S1, S2: string): Boolean; $[SysUtils.pas功能 返回两个字符串是否相等说明 区分大小写参考 function SysUtils.AnsiCompareStr例子 CheckBox1.Checked := AnsiSameStr(Edit1.Text, Edit2.Text);