7
votes

SQL Comparer la chaîne

' 1a' = ' 1a                 '

2 commentaires

Dunno. Collation de serveur peut-être?


Pourquoi comparez-vous des chaînes littérales à l'aide d'une requête SQL en premier lieu?


3 Réponses :


6
votes

parce que Oracle convertit votre littéral à chaîne en un char; Puisque le caractère est de longueur fixe, il doit étendre la chaîne plus courte à la longueur correcte et ajoute donc des espaces. Essayez Varchar2 à la place:

declare
  l_char1 char(10) := '1';
  l_char2 char(10) := '1    ';
  l_varchar1 varchar2(10) := '1';
  l_varchar2 varchar2(10) := '1    ';
begin
  if l_char1 = l_char2 then     
    dbms_output.put_line('char equal');
  else
    dbms_output.put_line('char NOT equal');
  end if;  
  if l_varchar1 = l_varchar2 then 
    dbms_output.put_line('varchar equal');
  else
    dbms_output.put_line('varchar NOT equal');
  end if;
end;  


2 commentaires

@Lukas Eder j'ai mal interprété la question - corrigé la réponse, merci.


Voici un lien vers les règles de comparaison de types de données qui spécifient que deux littéraux de chaîne seront comparés, par défaut, à l'aide de Char Sémantique de comparaison docs.oracle.com/cd/b14117_01/server..101/b10759/... " Oracle utilise une sémantique de comparaison avec pavé blanc uniquement lorsque Les deux valeurs de la comparaison sont l'une des expressions de DataType Char, Nchar, des littéraux texte ou des valeurs renvoyées par la fonction utilisateur. "



0
votes

En plus de la solution de Frank Schmitt's , lisez ce problème dans ce forum Publier ici:

http://asktom.oracle.com/ pls / asktom / f? p = 100: 11: 0 ::::: p11_question_id: 59852033114407

Une autre option de contour de contourner le problème n'est de ne pas utiliser de prédicat de comparaison, mais une autre fonction effectuer des comparaisons, par exemple décodage () , qui ne coerce pas les types de données: xxx


0 commentaires

0
votes

Pour plus d'informations, vous pouvez vous référer à la documentation Ici , qui dit: "Dans les expressions et conditions, Oracle traite les littéraux de texte comme s'ils disposent du type de données de type de données en les comparant à la sémantique de comparaison pavé en blanc," et ICI Pour plus de détails Semantiques de comparaison à blanc.


0 commentaires