sql - 为什么 SQL 浮点转换为字符串不能与 LIKE 一起使用,但 SQL 浮点转换为十进制转换为字符串可以?
问题描述
我有一个带有多个 type 的对象float
,我很好奇为什么下面的 SQL 语句不起作用,但它下面的那个却起作用。
SELECT TOP (1000) [number]
FROM [object]
WHERE CONVERT(varchar(255), number) LIKE '%201608147%'
结果“找到 0 行”。
SELECT TOP (1000) [number]
FROM [object]
WHERE CONVERT(varchar(255), CONVERT(decimal(20, 2), number)) LIKE '%201608147%'
找到 1 行结果
编辑:我被要求执行以下操作:
SELECT
number,
CONVERT(varchar(255), number),
CONVERT(varchar(255), CONVERT(decimal(20, 2), number))
FROM [object]
这产生了以下结果:
number : 201608147
number cast to string: 201608147
number cast to decimal: 201608147.00
为了表明它确实是一个浮点数:
解决方案
仿真后发现如下:
select nbr, Convert(varchar(255), nbr), Convert(varchar(255), Convert(decimal(20,2), nbr)) from tbl_XYZ
201608147 2.01608e+008 201608147.00
以字符串值的Convert(varchar(255), nbr)
形式返回手头数字的科学记数法;因此该值与您的模式不匹配:
LIKE '%201608147%'
此行为背后的原因是Float
DataType 用于保存数字的二进制(以 2 为底)近似值,而不是精确的十进制值。
浮点数通常以科学计数法显示。当范围比绝对精度更重要时,使用这些类型。这些数字在其他格式中很快变得笨拙。科学记数法也有助于强调有限的精度。在此示例中,您可以看到不同函数可用于格式化浮点数的不同方式。
DECLARE @float float = 201608147;
SELECT TheNumber = @float;
SELECT ConvertWithoutStyle = CONVERT(varchar(255),@float),
ConvertWithStyle0 = CONVERT(varchar(255),@float,0),
ConvertWithStyle1 = CONVERT(varchar(255),@float,1),
ConvertWithStyle2 = CONVERT(varchar(255),@float,2),
ConvertWithStyle3 = CONVERT(varchar(255),@float,3);
对于浮点数,样式可以具有如下所示的值之一。其他值被处理为 0。
Value Output
0 (default) A maximum of 6 digits. Use in scientific notation, when appropriate.
1 Always 8 digits. Always use in scientific notation.
2 Always 16 digits. Always use in scientific notation.
3 Always 17 digits. Use for lossless conversion. With this style, every distinct float or real value is guaranteed to convert to a distinct character string.
您正在使用从float
to的隐式转换varchar(255)
,它隐式使用 style 0
。您的浮点数超过六位数,因此它以科学计数法表示。
您可能想改用 STR 或 FORMAT。
推荐阅读
- python - 自动售货机项目 - OOP 代码指南 [Python]
- php - 如何停止将“边界”插入“内容类型”字段的 PHP cURL 上传?
- linux - 我可以在 Linux 中使用 -k 3 -t 代替 -k3n 吗?
- linux - Python 套接字错误“需要一个类似字节的对象而不是'str'
- excel - Excel 加载项与其他 Office365 应用程序的交互
- java - 求 n^k 模 10^7 + 7 的值
- javascript - JavaScript 怪异
- java - 如何从同一个android项目的另一个文件夹中的另一个类访问变量?
- c++ - 如何在向量元素之间遍历一个字符?
- encryption - 如何解密从 bitlocker 加密驱动器中恢复的单个文件