首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

查找列在某些字符串中的 sql 语句怎么写

2013-07-01 
查找列在某些字符串中的 sql 语句如何写?数据库表:table1 中有一个列是 bh 编号我现在要在查找编号在某个

查找列在某些字符串中的 sql 语句如何写?
数据库表:table1 中有一个列是 bh 编号
我现在要在查找编号在某个字符串中的记录,这里的字符串必须是用变量来表示。

string ls_sql
ls_sql = "'aaa','bbb','ccc','FY0-H','LFY0-H'"

select * from table1 where bh in (:ls_sql);
这个语句是不行的,选不到任何记录,为什么这样写就不行呢?

select * from table1 where charindex(bh,:ls_sql) > 0;
如果table中有两个编号:FY0-H, LFY0-H,本来这是两个编号,结果在选择时,这个语句会将这两条记录都选择出来!

怎么办?



[解决办法]
PB数据窗口使用数组参数执行SQL的IN方法:

在定义数据窗口参数变量时,根据自己需要的类型选择。

但在写条件的时候,关联符记得要写 in 可别写成= 

代码的实现(从病人表中取出2个病人ID号,001,002,类型为String):

String ar_patientid[]

  ar_patientid[1] = '001'

  ar_patientid[2] = '002'

dw_1.Retrieve(ar_patient)

//注 也可以通过程序从窗口中让用户动态选择窗口ID号再使用FOR循环赋到数组变量中。

利用SQL Monitor跟踪得到如下SQL语句:

SELECT 列1,列2,列3...... FORM 病人表 WHERE patientid in('001','002');


[解决办法]

引用:
我现在不是在数据窗口中使用,是在脚本中使用,为什么变量不能用在in 搜索条件中呢?

你那么写是语法的问题了

或者可以动态Sql来实现:

string ls_sql
Long ll_count

ls_sql = "('aaa','bbb','ccc','FY0-H','LFY0-H')"
ls_sql = "select Count(*) from table1 where bh in " + ls_sql
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
PREPARE SQLSA FROM :ls_sql ;
OPEN DYNAMIC my_cursor ;
FETCH my_cursor INTO :ll_count ;
CLOSE my_cursor ;

messagebox('', string(ll_count))

[解决办法]
不需要返回值的那更好办了,用动态sql的第一种语法去实现:

string  Mysql

Mysql="INSERT INTO dept Values (1234, 'Purchasing')" 

EXECUTE IMMEDIATE :Mysql ;


[解决办法]
ls_sql = "'aaa','bbb','ccc','FY0-H','LFY0-H'"
select * from table1 where bh in (:ls_sql);
这个语句执行时,对应的语句为:
select * from table1 where bh in (''aaa','bbb','ccc','FY0-H','LFY0-H'')

也就是说  :ls_sql  变为 'ls_sql'了,这样肯定查询不到的
//这时候你可能会想,我把
ls_sql = "'aaa','bbb','ccc','FY0-H','LFY0-H'"
改为:
ls_sql = "aaa','bbb','ccc','FY0-H','LFY0-H"
就可以了,但是错了,改后执行时的实际SQL语句为:
select * from table1 where bh in ('aaa'',''bbb'',''ccc'',''FY0-H'',''LFY0-H')

还是不行的。做好的是用charindex:

ls_sql = "
[解决办法]
aaa
------解决方案--------------------


bbb
[解决办法]
ccc
[解决办法]
FY0-H
[解决办法]
LFY0-H
[解决办法]
"
select * from table1 where charindex('
[解决办法]
'+bh+'
[解决办法]
',:ls_sql) > 0;

热点排行