这是我的面试问题
Area表中有两个列,分别称为Length和Breadth
Length Breadth Length*Breadth
20 NULL ?
30 ?
21.2 1 ?我尝试在插入时在MYSQL上运行相同的问题,为了插入一个空值,我尝试了下面的查询。在MYSQL中插入空值时,我是否遗漏了什么。
插入test.new_table值(30,);
答案:使用Null时,Result为Null。With float和int乘法结果为float
发布于 2012-03-28 09:20:26
根据您的问题,预期结果如下所示。
SELECT LENGTH,BREADTH,LENGTH*BREADTH AS CALC_AREA FROM AREA;
LENGTH BREADTH CALC_AREA
20
30 0 0
21.2 1 21.2对于SQL SERVER中的任何(第一个)记录,如果使用NULL进行计算,则答案将为NULL。
对于SQL SERVER中的任何(第二个)记录,如果在非空值和空值之间进行乘积计算,则结果将为零,因为空值将被视为零。
对于SQL SERVER中的任何(第三个)记录,如果在两个非空数据类型值之间进行计算,则答案将是非空值。
查看SQL Fiddle以获取参考- http://sqlfiddle.com/#!3/f250a/1
发布于 2012-03-28 09:09:17
除非呼吸是VARCHAR,否则不会出现空白呼吸(第二行)。假设这样,答案将是:
SELECT 21.2 * '1'返回21.20)。”发布于 2012-03-28 09:11:15
任意值和NULL的乘积为NULL。如果你想在谷歌上搜索,这叫做“零传播”。要在面试中得分,您可能需要指出NULL不是一个值;它是一个特殊的标记。
列宽度有一个条目"NULL“和一个空条目(在第二行)的事实具有误导性。在特定行中没有值的数值列表示该行为NULL。所以第二列也应该显示"NULL“。
第三行21.2 * 1的答案取决于列"Length*Breadth“的数据类型。如果是浮点型、双精度型或numberic(16,2)这样的数据类型,则答案是21.2。如果是整数列(integer、long等),则答案是21。
更尖刻的答案可能是“没有答案。字符串"Length*Breadth”不是合法的SQL列名。“
https://stackoverflow.com/questions/9899787
复制相似问题