查找列在某些字符串中的 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');
[解决办法]
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))
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'')select * from table1 where bh in ('aaa'',''bbb'',''ccc'',''FY0-H'',''LFY0-H')
ls_sql = "
[解决办法]
aaa
------解决方案--------------------
bbb
[解决办法]
ccc
[解决办法]
FY0-H
[解决办法]
LFY0-H
[解决办法]
"
select * from table1 where charindex('
[解决办法]
'+bh+'
[解决办法]
',:ls_sql) > 0;