各位高手、莱鸟,100分大送,关于sql查询问题,多谢各位,发分了! (100分)

  • 主题发起人 主题发起人 liyufei
  • 开始时间 开始时间
我是在数据库桌面建的dbf
 
我试了很久,真不行,我只好作以下建议:
1.继续与大家摸索,什么时候摸着算什么时候。
2.尽量不用通配符作字符串的一部分。也就是说,不用下划线,改用其它字符。
3.改用其它数据库。都什么时代了,还用dbase? 连LEFT() 都不支持!真气人!

第2种方案简便,第3种方案明智,第1种方案
——有希望作DBASE专家,万一回到199X年,大有可为!
 
你那个查询条件有个特点就是只要知道了“_”的位置就可以找到符合条件的记录
故首选要知道那个“_”在哪个位置,然后再写SQL语句:
下面的例子查找“_”在第四个位置即找第一大类中的第一小类(“1-1”)的所有记录:
select * from kucuen.dbf
where substring(wzcode from 4 for 1)='_'
在SQL Explorer中测试通过,用的是DB表,不过DBF应该也可以,因为它们同是local sql

local SQL支持以下函数:
Local SQL supports the following data manipulation language functions:

String functions Description

Concatenation Concatenates two string values.
LOWER Forces a string to lowercase.
UPPER Forces a string to uppercase.
SUBSTRING Extracts a portion of a string value.
TRIM Removes repetitions of a specified character from the left, right, or both sides of a string.

Aggregate functions Description

AVG Averages all non-NULL numeric values in a column.
COUNT Counts the number of rows in a result set.
MAX Determines the maximum value in a column.
MIN Determines the minimum value in a column.
SUM Totals all numeric values in a column.

Data functions Description

CAST Converts values from one data type to another.
EXTRACT Extracts the year, month, or day field of a date.
其中:
substring():Extracts a substring from a string.
SUBSTRING(column_reference FROM start_index [FOR length])
在Delphi的HELP中输入local sql
选Local SQL (online reference).
再选see also
在弹出的窗口里选data mainipulation overview
然后选择function就可以找到local sql运行的函数了。
按相应函数可以找到它的使用方法,(我是在这里为大家找到答案的)
看来还是HELP重要啊!!!!!
 
我也试过SUBSTRING(),出错!
 
你在哪里试的?
我在SQL Explorer里面的DBDEMOS里面试的。虽然是DB表,但和BDF一样都是
同属local sql范围的。
测试过程,用desktop在DBDEMOS内建立一表,(szcode A 10)
wzcode(输入几条记录)
1-1_1
1-1_2
1-11_1
1-12_1
没有做索引等。
可以啊,
你也先在SQL explorer里面输入SQL语句试试,
比如可以在
select substring(某字段名 from 1 for 1) from 某表
说明substring是可用的。
然后再试substring在where 后面也是可用的
select * from 某表 where substring( 某字符字段 from 1 for 1)='a'(找出这字段中以a开头的所有记录)
 
我建立了一个DBF表,再测试后是可以的,
不知道你是怎么测试substring 不行的?
 
程序的测试:
一Query控件,SQL=“select * from kucuen.dbf where substring(wzcode from 4 for 1)='_'”
一DataSource连到query
一dbgrid连到datasource,
将query.active设为true
在DBGRID可以看到的结果集是
1-1_1
1-2_1
1-1_2
这说明substring起了作用,当然要把1-2_1去除掉得再加条件在where后面了。
我想说明了有substring可用后,余下的应该不是问题了
在这里再补足吧:
select * from kucuen.dbf 
where substring(wzcode from 4 for 1)='_' and substring(wzcode from 1 for 3)='1-1'
(其中的4和后面的3要自己先计算,这对你应该不是问题)
 
with userdate.query1 do
begin
close;
sql.clear;
sql.add('select * from kucuen.dbf where wzcode like:nam where substring(nam,1,length(edit1.text))='''+edit1.text+'''');
prepare;
open;
 
行了,我按SQL SERVER语法来用substring,所以出错。
with query1 do
begin
close;
sql.clear;
sql.add('SELECT * FROM kucuen.dbf ');
sql.add(' WHERE substring(NAM FROM 1 FOR ');
sql.add(INTTOSTR(LENGTH(EDIT1.Text)+1) + ') = ''' + EDIT1.TEXT + '_''');
open;
end;

SQL语句:SELECT * FROM kucuen.dbf WHERE substring(NAM FROM 1 FOR 4) = '1-1_'
多谢 yhaochuan 的指点!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部