Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy 1 zawsze równa się '1' w SQL?

SELECT 1='1' daje TRUE od '1' jest poprawnym konstruktorem dla INT we wszystkich znanych mi implementacjach.

Ale SQL używa ścisłego wpisywania, zobacz, że:

# 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.

W odniesieniu do standardu (SQL 92, 99 i 2003) wydaje się, że jest on błędny:

     <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> }... ]

ponieważ <quote> jest zawarty tylko w <bit string literal> , <hex string literal> , ... ale nie literałami numerycznymi...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja PHP do ucieczki ze składni wyrażenia regularnego MySQL

  2. zaznaczanie wierszy, które wystąpiły więcej niż trzy razy

  3. Zapytanie przestawne MySQL

  4. Najlepsze praktyki dotyczące systemu spotkań/rezerwacji PHP/MySQL

  5. async i czekaj na wywołanie MySQL w węźle js