我使用SQL Server。意外的SQL分割结果?
与分部合作我在这两个查询中收集了我的发现,您可以使用SQL Server版本重现这些查询。
我期待从Integer公司获得相同的价值。 因为无论我的表中有什么值,如果我得到意想不到的结果,我最终会遇到一个逻辑错误,有时很难进行调查。
SQL答:
WITH s AS (
SELECT 'Integer' AS c, 1 AS k UNION
SELECT 'Float', 1 UNION
SELECT 'NULL', NULL
)
SELECT
c AS [Type],
k/10 AS 'Division',
CAST(k as numeric(38,4))/10 AS 'Cast',
COALESCE(k, 0)/10 AS 'Coalesce',
COALESCE(k, .0)/10 AS 'Coalesce with float'
FROM s;
结果A
Type Division Cast Coalesce Coalesce with float
Float 0 0.100000 0 0.100000
Integer 0 0.100000 0 0.100000
NULL NULL NULL 0 0.000000
SQL B:
WITH s AS (
SELECT 'Integer' AS c, 1 AS k UNION
SELECT 'Float', .1 UNION
SELECT 'NULL', NULL
)
SELECT
c AS [Type],
k/10 AS 'Division',
CAST(k as numeric(38,4))/10 AS 'Cast',
COALESCE(k, 0)/10 AS 'Coalesce',
COALESCE(k, .0)/10 AS 'Coalesce with float'
FROM s;
结果A
Type Division Cast Coalesce Coalesce with float
Float 0.010000 0.010000 0.010000 0.010000
Integer 0.100000 0.100000 0.100000 0.100000
NULL NULL NULL 0.000000 0.000000
请检查第二条语句SELECT'Float',.1 – profimedica
@profimedica在第二条语句中,您有一个小数点。这与0.1相同。第一个是缺失的,这就是为什么你的整数除法返回一个整数。 – scsimon
我必须强调,我创建了两个方案,意识到添加点创建浮动的效果。此外,我期待的整数除法的结果导致一个整数和浮动的结果导致浮动。这两个例子都是第一行。意想不到的结果是在整数线上,参与者是相同的,但输出的类型是由浮点结果决定的。 – profimedica