SQL查询,字段类型为NUMERIC

Lor*_*nzo 2 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]
Run Code Online (Sandbox Code Playgroud)

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

SELECT *
FROM MyTable
WHERE MyTableID = '1'
Run Code Online (Sandbox Code Playgroud)

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

OMG*_*ies 6

您演示的内容通常称为隐式数据转换 - 数据会自动转换为要比较的列的数据类型.因为值为"1"的字符串可以转换为值为1的数值数据类型,所以工作正常.隐式数据类型转换可以根据此处的优先级列表进行.

显式数据转换是指使用CAST或CONVERT等函数时.

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

  • @Martin:当事情看起来更简单时,总有一个缺点!:) (2认同)