SQL Server 2012:插入到 varchar 列中的整数值以科学记数法显示
SQL Server 2012: integer values inserted in varchar column show up with scientific notation
我有一个 table,它在 VARCHAR
列中存储 INTEGER
个数字,似乎某些值已转换为科学记数法。
SELECT [Sales Key], cast(cast([Sales Key] as real) as float)
FROM <table>
where [Sales Key] = '3.11886e+008'
产出
Sales Key ConvertedValue
3.11886e+008 311886016
然而,
SELECT *
FROM <table>
where [Sales Key] = '311886016'
return没什么。
有人可以帮我理解这种行为吗? 3.11886e+008 看起来像是 311886016 的舍入表示,但为什么第二个查询无法 return 任何东西?
谢谢!
编辑:
select cast(cast('3.11886e+008' as real) as bigint) as Number
Number
311886016
实际上不应该输出 311886000 吗?
这个初始转换让我想知道当查询 运行.
时是否涉及任何类型转换
因为当你写 SQL
SELECT *
FROM <table>
where [Sales Key] = '311886016'
它正在尝试比较字符 '3.11886e+008'
与 '311886016'
不匹配。
在varchar列中,查找的是字符串匹配,不是整数值匹配。
你可以使用这个(但它会很慢):
SELECT *
FROM <table>
where cast(cast([Sales Key] as real) as float) = 311886016
显然,真正的问题是您使用了错误的数据类型,但很可能您现在无法更改它。像 Varchar 一样搜索它。
SELECT *
FROM <table>
WHERE [Sales Key] LIKE '311886016%'
Alexander 示例的缺点(我没有足够的声誉来评论他的回答)是无法使用索引(如果有的话)。
最好使用以下查询(如果值始终以科学记数法存储):
SELECT *
FROM <table>
where [Sales Key] = format(311886016, 'E')
我有一个 table,它在 VARCHAR
列中存储 INTEGER
个数字,似乎某些值已转换为科学记数法。
SELECT [Sales Key], cast(cast([Sales Key] as real) as float)
FROM <table>
where [Sales Key] = '3.11886e+008'
产出
Sales Key ConvertedValue
3.11886e+008 311886016
然而,
SELECT *
FROM <table>
where [Sales Key] = '311886016'
return没什么。
有人可以帮我理解这种行为吗? 3.11886e+008 看起来像是 311886016 的舍入表示,但为什么第二个查询无法 return 任何东西?
谢谢!
编辑:
select cast(cast('3.11886e+008' as real) as bigint) as Number
Number
311886016
实际上不应该输出 311886000 吗?
这个初始转换让我想知道当查询 运行.
时是否涉及任何类型转换因为当你写 SQL
SELECT *
FROM <table>
where [Sales Key] = '311886016'
它正在尝试比较字符 '3.11886e+008'
与 '311886016'
不匹配。
在varchar列中,查找的是字符串匹配,不是整数值匹配。
你可以使用这个(但它会很慢):
SELECT *
FROM <table>
where cast(cast([Sales Key] as real) as float) = 311886016
显然,真正的问题是您使用了错误的数据类型,但很可能您现在无法更改它。像 Varchar 一样搜索它。
SELECT *
FROM <table>
WHERE [Sales Key] LIKE '311886016%'
Alexander 示例的缺点(我没有足够的声誉来评论他的回答)是无法使用索引(如果有的话)。
最好使用以下查询(如果值始终以科学记数法存储):
SELECT *
FROM <table>
where [Sales Key] = format(311886016, 'E')