SQL查询,字段类型为NUMERIC

时间:2010-12-09 00:59:24

标签: sql sql-server sql-server-2008

我有一张像这样的桌子

CREATE TABLE MyTable (
    [MyTableID] [int] NOT NULL,
    [Description] [varchar](50) NOT NULL,
    CONSTRAINT [PK_AddressType] PRIMARY KEY CLUSTERED (
        [MyTableID] ASC
    )
) ON [PRIMARY]

即使我在单引号中包含字段值,有人可以解释为什么以下查询有效吗?

SELECT *
FROM MyTable
WHERE MyTableID = '1'

这是SQL Server特有的功能吗?它是ANSI / SQL?

2 个答案:

答案 0 :(得分:6)

您所演示的内容通常被称为隐式数据转换 - 数据会自动转换为要比较的列的数据类型。因为值为“1”的字符串可以转换为值为1的数值数据类型,所以工作正常。隐式数据类型转换可以根据此处的precedence list进行。

明确的数据转换是指您使用CAST or CONVERT等功能时。

我知道的所有数据库都支持String to numeric(反之亦然) - SQL Server,Oracle,MySQL,PostgreSQL ...... CAST函数是ANSI,IIRC。其他数据类型不灵活 - 日期和时间例如,日期时间。

答案 1 :(得分:3)

除了OMG小马的回答。

隐式数据类型转换可以根据此处的precedence list进行。

当谓词中常量或参数的数据类型的优先级高于列的优先级时,它们可能是性能问题的根源。在这种情况下,列值需要进行隐式转换,这意味着不能使用索引。