SQL:关于Interbase中两个字段间模糊匹配查找(100分)

  • 主题发起人 主题发起人 websoul
  • 开始时间 开始时间
W

websoul

Unregistered / Unconfirmed
GUEST, unregistred user!
SQL语句如下
Select mode,style from basetable
where mode like style||'%'

// 为了查出所有mode是以Style打头的记录
// ||操作符是否表示Interbase中的字符串相加,偶不敢确认

我的尝试如下:
1. 用常数字符串加通配符进行测试
BaseTable表:两个字段,内容如下
mode(char(30)) style(char(20))
mode1 mode
mode2 mod
1mode mode1
mode2 mode
mode2 mode2
用SQL:
Select mode,style from basetable
where mode like 'mode'||'%'
可以查出我需要的结果:
mode(char(30)) style(char(20))
mode1 mode
mode2 mode
mode2 mode2
但是如果把常数字符串换成字段的话,查询结果不对,即用SQL
Select mode,style from basetable
where mode like style||'%'
查询为
mode(char(30)) style(char(20))
mode2 mode2
只有mode和Style相等的记录被查到。
不知为什么,请高手指点,谢谢。

BTW:这几天特背,唉...
 
主要原因在于数据库字段的后导空格。
你定义了STYLE 为 CHAR(20),则一般不满20的后面加空格了。

所以,条件的STYLE字段必须加RTRIM或TRIM之类的去空格的函数。
此函数在ORACL中是RTRIM,在INTERBASE中就不一定是了,可能
你要自己查HELP。

附:在ORACLE中的语句:
Select mode,style from basetable
where mode like rtrim(style)||'%'
 
//to yck
在InterBase中没有Trim之类的函数,
可能需要定义自己的UDF,定义UDF困难吗,
在TQuery.SQL中能引用这种UDF函数吗?

如果不定义UDF,还有没有其他方法?


 
//在Interbase中,字符串相加的确是用||操作符, 没问题。
 
笨人自有笨办法,把 style 变量取到变量中,用Delphi
中的trim函数.望各位大峡不要见笑.
哎:确实太笨了.
 
InteBase中没有Trim,RTrim,LTrim?这个应该是都有的吧?
 
//to income
如何将满足什么条件的Style送入变量?

好象有个前提问题!

 
//to 3h
interbase中没有标准的LTrim,RTrim函数.
但是可以自己定义UDF, 但我不知UDF的用法
 
为了回答这个TRIM问题,特地安装了一下INTERBASE,
发现它居然真的没有此类函数,而且可用的函数甚至不如LOCAL DATABASE,
如PARADOX之类。

对于INTERBASE,我也没有兴趣研究,因为它功能实在太弱,
建议你改数据库类型吧。

不过若你坚持用INTERBASE(或由于其它原因非用不可),
我建议你试一试下面方法:
使用不定长类型如VARCHAR(N)或CHAR VARYING(N)试一试。
因为它是不定长的类型,或许后面没有空格。
 
yck说的有道理,用varchar可以实现。谢谢!
看哪为能找出char类型时的处理方法。
 
你还可以试一试CAST函数,
不知它可不可以将CHAR的类型转化成VARCHAR类型,

Select mode,style from basetable
where mode like cast(style as varchar)||'%'
 
如果有大量的数据,最好不用varchar,它会影响
性能的。如果实在不行,你可以在表中加入冗余
字段,field3,每加入一记录时就将它修改
 
请继续讨论或结束问题
 
我始终认为Interbase很好,说不好可能是您没有真正了解他,
UDF使用很简单,Interbase自带的IB_UDF有Trim,或者去www.interbase.com
下载一个FreeUDF,有很多扩充函数,

使用UDF方法,例如ib_udf:

把lib/ib_udf.dll 放到 windows/system目录
在ISQL里连好你的库,再执行examples/ib_udf.sql即可.

Interbase非常好!!!

 
请rss具体一点?怎样执行examples/ib_udf.sql?谢谢!我在wisql中用run an Isql script,可是显示不能执行。
 
接受答案了.
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
828
DelphiTeacher的专栏
D
后退
顶部