【问题标题】:sql like operator on integersql like 整数运算符
【发布时间】:2021-12-24 00:54:15
【问题描述】:

我谷歌搜索'sql like operator on integer',都告诉我使用

   where cast ( int_field as text ) like '%30.%'

警告:现实是相反的位置!!!

为什么我可以直接在整数、小数上使用“like”运算符,而不需要强制转换?

这是我的 mysql 示例:

另一个例子:

整数类型

【问题讨论】:

  • 我已经删除了 [sql-server],因为上面清楚地说明了“MySQL Workbench”,它是 MySQL 的 IDE。请只标记您真正使用的RDBMS。
  • “为什么我可以直接在整数、小数上使用 'like' 运算符,而不需要强制转换?” - 好问题。 (而且只有负责的人才能回答...)
  • 不,sql-server 具有相同的功能。 oracle 有相同的,请添加 oracle 标签!!!!
  • 但你不是在问 SQL Server,@hoogw,你显然在使用 MySQL,所以 SQL Server 与你的问题无关。它可能有类似行为的事实是无关紧要的。
  • 再次,这是 SQL Server 的文档;我在这里的唯一原因是因为标签不正确。然后你对此提出异议,我再次确认了我的行为,并引用了我擅长的 RDBMS 的相关文档。我无法回答有关 MySQL 的问题,因为这不是我的专长。

标签: mysql sql


【解决方案1】:

感谢“Larnu”,他发现文件解释了为什么会发生这种情况。

再次第一段...“如果任何一个参数不是字符串数据类型,SQL Server 数据库引擎将其转换为字符串数据类型(如果可能)

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql?view=sql-server-ver15

这很重要您可以在所有 SQL 引擎、Microsoft SQL Server、Oracle、MySQL 上执行此操作

这是关于 MySQL 的文档,一定有人会在 Oracle 上找到类似的文档。

归功于“比尔·卡尔文”

https://dev.mysql.com/doc/refman/8.0/en/string-comparison-functions.html#operator_like

https://dev.mysql.com/doc/refman/8.0/en/type-conversion.html

【讨论】:

    【解决方案2】:

    这由 MySQL 中的隐式类型转换处理。

    当您在字符串上下文中使用数字类型时,即将其与字符串进行比较,然后将数字隐式转换为字符串,然后评估比较。你不需要先使用CAST()。

    这里记录了 MySQL:https://dev.mysql.com/doc/refman/8.0/en/type-conversion.html

    我不知道您在谷歌搜索时发现了哪些参考资料。他们可能正在描述不同 RDBMS 产品中的 SQL 实现。供应商之间的实现有所不同;并非所有 SQL 数据库都有相同的行为。

    例如,MySQL 甚至不支持CAST(<expr> AS TEXT)。你可以CAST(<expr> AS CHAR)(见https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast)。因此,您阅读的示例甚至不适用于 MySQL。

    也可能是您正在阅读由对 SQL 语义不完全了解的人撰写的文章或教程。

    一般来说,隐式类型转换在 SQL 中是标准的,因此您应该在类似的实现中找到类似的行为。

    https://crate.io/docs/sql-99/en/latest/chapters/03.html 说:

    数值运算

    一个数字与所有其他数字兼容且可比—— 也就是说,所有数字都可以相互比较和相互分配。 数字不得直接与,或直接分配给, 任何其他类,虽然 隐式类型转换可以 出现在表达式、SELECT、INSERT、DELETE 和 UPDATE 中。显式 可以使用 CAST 运算符强制进行数字类型转换。

    (强调我的)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 2010-12-16
      相关资源
      最近更新 更多