call SelectScore('430000,110000,120000')数据是这样的id name value  
430000 1 1
110000 2 2
120000 3 3
230000 4 4
CREATE PROCEDURE SelectScore(
  s_SchoolProvinceID varchar(200)
)
begin
select   
  *
from t_tdscore where s_StudentProvinceID in(s_SchoolProvinceID );
end;s_SchoolProvinceID 它要传入的参数in( '430000','110000','12000')格式查询结果为id name value  
430000 1 1
110000 2 2
120000 3 3求解析
s_SchoolProvinceID 请问这个格式怎么拼接

解决方案 »

  1.   

    MYSQL拆分字符串?那需要写函数。
      

  2.   

    SQL SERVER 中可以用
    exec ('select * from t_tdscore where s_StudentProvinceID in('+@s_SchoolProvinceID+')')
    或是用charindex 。在mysql 中我熟悉。
      

  3.   

    比如现在有一字符串:1,2,44,5,666,29232 要把它按照逗号分割成: 1 2 44 5 666 29232 而且还要求它的总数。这个我以前写过。不过今天规范一下。 1、具体函数 SQL code DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string_total`( f_string varchar(1000),f_delimiter varchar(5) ) RETURNS int(11) BEGIN-- Get the total number of given string. return 1+(length(f_string) - length(replace(f_string,f_delimiter,''))); END$$ DELIMITER ; SQL code DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string`( f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8 BEGIN-- Get the separated number of given string. declare result varchar(255) default ''; set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1)); return result; END$$ DELIMITER ; 测试的存储过程: DELIMITER $$ CREATE PROCEDURE `sp_print_result`( IN f_string varchar(1000),IN f_delimiter varchar(5) ) BEGIN-- Get the separated string. declare cnt int default 0; declare i int default 0; set cnt = func_get_split_string_total(f_string,f_delimiter); drop table if exists tmp_print; create temporary table tmp_print (num int not null); while i < cnt do set i = i + 1; insert into tmp_print(num) values (func_get_split_string(f_string,f_delimiter,i)); end while; select * from tmp_print; END$$ DELIMITER ; 2、来做一下测试mysql> call sp_print_result('1,2,44,5,666,29232',','); +-------+ | num | +-------+ | 1 | | 2 | | 44 | | 5 | | 666 | | 29232 | +-------+ 6 rows in set (0.01 sec) Query OK, 0 rows affected (0.01 sec)
      

  4.   


    传到数据格式为'23,32,32'
    大哥...我想select * from in('23','32','32')这个模式有没
      

  5.   

    select * from t_tdscore  where FIND_IN_SET(id,s_SchoolProvinceID);我记得昨天都写过。为什么要用IN?
      

  6.   


    declare @T table(c1 varchar(1),c2 int)
    insert @T
    select 'a',10 union all
    select 'b',90 union all
    select 'c',102 union all
    select 'd',121 union all
    select 'e',111declare @s_SchoolProvinceID varchar(10)
    set @s_SchoolProvinceID='b,c,e'
    select * from @T where charindex(','+c1+',',','+@s_SchoolProvinceID+',')>0/*
    ---- -----------
    b    90
    c    102
    e    111
    */--mysql 中貌似有个函数INSTR 可以代替sql server 中的charindex
      

  7.   

    drop table if exists t_tdscore;
    drop PROCEDURE  if exists SelectScore;
    create table t_tdscore 
    (
    id varchar(10),
    name varchar(10),
    value INT
    );insert into t_tdscore values('430000','1',1);
    insert into t_tdscore values('110000','2',2);
    insert into t_tdscore values('120000','3',3);
    insert into t_tdscore values('230000','4',4);
    DELIMITER $$
    CREATE PROCEDURE SelectScore(
      s_SchoolProvinceID varchar(200)
    )
    begin
    select * from t_tdscore where FIND_IN_SET(id,s_SchoolProvinceID);
    END$$
     DELIMITER ;
    call SelectScore('430000,110000,120000');/*430000 1 1
    110000 2 2
    120000 3 3
    */