sql >> Database >  >> RDS >> Mysql

Is 1 altijd gelijk aan '1' in SQL?

SELECT 1='1' geeft TRUE sinds '1' is een correcte constructor voor INT in alle bij mij bekende uitvoering.

Maar SQL gebruikt strikt typen, zie dat:

# SELECT 1=CAST('1' AS TEXT);
ERROR:  operator does not exist: integer = text
LINE 1: SELECT 1=CAST('1' AS TEXT);
                ^
HINT:  No operator matches the given name and argument type(s). You might need to add  explicit type casts.

Wat betreft de standaard (SQL 92, 99 &2003) lijkt het niet te kloppen:

     <literal> ::=
            <signed numeric literal>
          | <general literal>

     <general literal> ::=
            <character string literal>
          | <national character string literal>
          | <bit string literal>
          | <hex string literal>
          | <datetime literal>
          | <interval literal>

     <signed numeric literal> ::=
          [ <sign> ] <unsigned numeric literal>

     <unsigned numeric literal> ::=
            <exact numeric literal>
          | <approximate numeric literal>

     <exact numeric literal> ::=
            <unsigned integer> [ <period> [ <unsigned integer> ] ]
          | <period> <unsigned integer>

     <unsigned integer> ::= <digit>...

     <character string literal> ::=
          [ <introducer><character set specification> ]
          <quote> [ <character representation>... ] <quote>
            [ { <separator>... <quote> [ <character representation>... ] <quote> }... ]

omdat <quote> zit alleen in <bit string literal> , <hex string literal> , ... maar niet in numerieke letterlijke ...



  1. Postgresql mislukt een specifieke query EEN keer nadat Windows opnieuw is opgestart

  2. Oracle CLOB kan niet meer dan 4000 tekens invoegen?

  3. Type komt niet overeen:kan niet converteren van int naar ResultSet

  4. Hoe kan ik ervoor zorgen dat twee willekeurig geselecteerde rijen van elkaar verschillen?