Sql:将 INT 转换为字符串

use*_*er1 1 t-sql sql-server

TableA

OFIPS int null,
DFIPS int null
Run Code Online (Sandbox Code Playgroud)

下面的查询返回一条记录。

SELECT OFIPS from TableA Where OFIPS = 01077
Run Code Online (Sandbox Code Playgroud)

但是这个查询没有。

SELECT OFIPS from TableA Where CAST(OFIPS as nvarchar(5)) = '01077'
Run Code Online (Sandbox Code Playgroud)

不确定是什么问题。请帮忙。

Pரத*_*ீப் 6

因为在int列前导零将被忽略,010771077在您查询时存储

Where OFIPS = 01077
Run Code Online (Sandbox Code Playgroud)

它将被解析为

Where OFIPS = 1077
Run Code Online (Sandbox Code Playgroud)

将存储一条记录,1077以便您获得结果。

但是当你查询时

Where CAST(OFIPS as nvarchar(5)) = '01077'
Run Code Online (Sandbox Code Playgroud)

它检查记录,01077这就是为什么您在第二次查询中没有得到结果


有趣的是,如果您再次删除CASTinWhere子句,它将起作用。即使您以字符串格式查询前导零。

Where OFIPS = '01077'
Run Code Online (Sandbox Code Playgroud)

因为LHSOFIPS具有INT数据类型具有比RHS更高precedense Varchar。RHS( 01077)中的隐式字符串将被转换为 int1077