SQL2000 中用substring查询的问题

3502lnb 2006-06-05 03:20:01
ADOQUERY1.Close;
ADOQUERY1.SQL.Clear;
ADOQUERY1.SQL.Add('SELECT * FROM RYMXA WHERE SUBSTRING(DWDM,1,:A)=''301''');
ADOQUERY1.Parameters.ParamByName('A').Value:=4;
ADOQUERY1.Open
错误提示:’函数susbtring参数3的数据类型VARCHAR无效‘不知为什么SUBSTRING函数如何传递数值变量。
...全文
271 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxp82428 2006-06-05
  • 打赏
  • 举报
回复
ADOQUERY1.Close;
ADOQUERY1.SQL.Clear;
ADOQUERY1.Parameters.ParamByName('A').Value:=4;
ADOQUERY1.SQL.Add('SELECT * FROM RYMXA WHERE SUBSTRING(DWDM,1,:A)=''301''');
ADOQUERY1.Open;
這樣如何?呵呵
myanwei 2006-06-05
  • 打赏
  • 举报
回复
参数A的类型定义没有?
SeaSon_Lang 2006-06-05
  • 打赏
  • 举报
回复
ADOQUERY1.Parameters.ParamByName('A').Value:=4;
換成
ADOQUERY1.Parameters.ParamByName('A').Integer:=4;
看看行否!
wudi_1982 2006-06-05
  • 打赏
  • 举报
回复
substring的变量可以在写sql语句的时候直接加进去,例如
length='3';
sqltxt := 'select * from tablename where substring(fieldname,1,'+length+')=某某'
adoquery.sql.text := sqltxt;

写好之后,你还是要单步跟踪一下,看看sql.txt究竟在你赋值之后编程了什么,不要想当然。
3502lnb 2006-06-05
  • 打赏
  • 举报
回复
adoquery1.sql.text没有问题我觉得就是substring如何接收变量 特别感谢!!!
wudi_1982 2006-06-05
  • 打赏
  • 举报
回复
你单步跟踪一下,看看你的adoquery1.sql.text是什么?
3502lnb 2006-06-05
  • 打赏
  • 举报
回复
wudi_1982谢谢!出现函数susbtring参数3的数据类型VARCHAR无效错误??
wudi_1982 2006-06-05
  • 打赏
  • 举报
回复
上面写错了,把inttostr(i)后边的等号编程加号,就是这个思路,把你的length变量转换成string类型后,直接加到sqlstring中。
wudi_1982 2006-06-05
  • 打赏
  • 举报
回复
var
s : string;
i : integer;
begin
i := 3;//i就是length
s:='SELECT * FROM RYMXA WHERE SUBSTRING(DWDM,1,'+inttostr(i)=')+''301'''
end;
3502lnb 2006-06-05
  • 打赏
  • 举报
回复
谢谢!!我想的是SUBSTRING ( expression , start , length )
length换成变量传送
wudi_1982 2006-06-05
  • 打赏
  • 举报
回复
Syntax
SUBSTRING ( expression , start , length )

Arguments
expression

Is a character string, binary string, text, image, a column, or an expression that includes a column. Do not use expressions that include aggregate functions.

start

Is an integer that specifies where the substring begins.

length

Is an integer that specifies the length of the substring (the number of characters or bytes to return).

下面给你个例子,
select * from baseinfo
where substring(convert(varchar(2),xh),1,1)='1' 查询序号开头是1的记录,xh是int类型

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧