Question

J'ai un champ id_list='1234,23,56,576,1231,567,122,87876,57553,1216'

Et je veux l'utiliser pour rechercher IN Ce champ:

SELECT * 
FROM table1
WHERE id IN (id_list)
  • id est integer

  • id_list est varchar/text

Mais de cette façon, cela ne fonctionne pas, donc j'ai besoin d'une certaine manière de se séparer id_list dans SELECT QUERY.

Quelle solution dois-je utiliser ici? J'utilise la base de données T-SQL Sybase ASA 9 (SQL Anywhere). Mais de cette façon, cela ne fonctionne pas, donc j'ai besoin d'une certaine manière de se séparer id_list dans SELECT QUERY.

La façon dont je vois cela, consiste à créer sa propre fonction avec une boucle à travers, et chaque élément extrait basé sur la recherche de position divisée par délimiteur, puis insérez des éléments dans la table temporaire quelle fonction reviendra en conséquence.


Commentaires à Sebastian Meine Réponse et ses solutions:

Sybase SQL n'importe où 9

  • sa_split_list La procédure du système n'existe pas ici, donc cela ne fonctionne pas

  • CAST fonctionne très bien

Sybase SQL n'importe où 12

  • sa_split_list La procédure du système existe et fonctionne très bien

  • CAST fonctionne très bien

Pour le Sybase SQL n'importe où 9, j'ai fait du remplacement de la procédure du système SA_SPLIT_LIST:

CREATE PROCEDURE str_split_list(in str long varchar, in delim char(10) default ',')
RESULT(
  line_num integer,
  row_value long varchar)
BEGIN
  DECLARE str2 long varchar;
  DECLARE position integer;

   CREATE TABLE #str_split_list (
   line_num integer DEFAULT AUTOINCREMENT,
   row_value long varchar null,
   primary key(line_num));

   SET str = TRIM(str)+delim;
   SET position = CHARINDEX(delim, str);

   separaterows:
   WHILE position > 0 loop
       SET str2 = TRIM(LEFT(str, position - 1));
       INSERT INTO #str_split_list (row_value)
       VALUES (str2);
       SET str = RIGHT(str, LENGTH(str) - position);
       SET position = CHARINDEX(delim, str);
    end loop separaterows;

   select * from #str_split_list order by line_num asc;

END

Exécutez la même manière que SA_SPLIT_LIST:

select * from str_split_list('1234,23,56,576,1231,567,122,87876,57553,1216')

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top