微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL中1总是等于’1’吗?

我试图确定用于将数字与相同数字的字符或字符串版本进行比较的标准sql行为. SELECT 1 =’1′(或类似)是否总是返回某种“真实”值(真,1,’t’等)?我已经在PostgresqlMySQL上做了很多确认,但我找不到整个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>,…中,但不包含在数字文字中…

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐