sql - SQL 中 1 总是等于 '1' 吗?

标签 sql mysql postgresql comparison behavior

我正在尝试确定将数字与相同数字的字符或字符串版本进行比较的标准 SQL 行为。 SELECT 1 = '1'(或类似的)是否总是返回某种“真实”值(true1 't' 等)?我已经在 PostgreSQL 和 MySQL 上确认了很多,但我找不到整个 SQL 的资源。

更新: 这个问题的目的是我试图弄清楚使用不带引号的数字在选择/插入/更新等时是否有效。来自值为数字的非数字字段。

最佳答案

SELECT 1='1'给出 TRUE'1'INT 的正确构造函数在我所知的所有实现中。

但是 SQL 使用严格类型,请看:

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

关于标准(SQL 92、99 和 2003)似乎是错误的:

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

因为<quote>仅包含在 <bit string literal> 中, <hex string literal> , ... 但不是数字文字...

关于sql - SQL 中 1 总是等于 '1' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2134102/

相关文章:

sql - 如何从sybase中的字符串中提取子字符串?

php - 海量产品类别更新(为所有产品添加 `home` 类别) - Prestashop 1.6.0.6

php - 我可以从批量插入中检索 lastInsertId 吗?

postgresql - Postgres : Aggregating full table data in case of table partitions

sql - 将不匹配的 ID 插入列的更快方法

mysql - 使用 JOIN 避免 SELECT-in-SELECT 语句

mysql - Rails 3 限制搞乱了数据库查询中的顺序

MySQL 替换字符串 SUM 然后总计

mysql - 如果值不同,如何插入或更新?

postgresql - Laravel DB insert([]) 只插入数组的第一条记录