SQL Server中的函数强制转换不受影响时的情况
我尝试选择如下所示:SQL Server中的函数强制转换不受影响时的情况,sql,sql-server,Sql,Sql Server,我尝试选择如下所示: CREATE TABLE v_test ( id int, name char(4) ); INSERT INTO v_test SELECT 1, NULL UNION SELECT 2, NULL SELECT id, CASE WHEN name IS NULL THEN ' ' ELSE CAST((LEFT(name, 2) + ':'
CREATE TABLE v_test
(
id int,
name char(4)
);
INSERT INTO v_test
SELECT 1, NULL
UNION
SELECT 2, NULL
SELECT
id,
CASE
WHEN name IS NULL
THEN ' '
ELSE CAST((LEFT(name, 2) + ':' + SUBSTRING(name, 3, 2) + ':00') AS TIME)
END AS test,
name
FROM
v_test;
SELECT
id,
CASE
WHEN name IS NULL
THEN ' '
ELSE '0'
END AS test,
name
FROM v_test;
这些查询的结果如下所示:
您可以看到,在函数强制转换中不受影响时的结果情况。有人能给我解释一下细节吗?这句话“你可以看到,在函数转换中不受影响时的结果情况。”恐怕毫无意义。我想你要问的是为什么值'
显示为00:00:00.0000000
根据文件规定:
从中的类型集中返回优先级最高的类型
结果\u表达式和可选的else\u结果\u表达式。更多
有关详细信息,请参阅
如果我们也参考上述链接文档,则会提供(当前)数据类型的先例:
SQL Server对数据类型使用以下优先顺序:
time
比varchar
具有更高的优先级,因此您的值'
被隐式转换为time
,而CONVERT(time,)='00:00:00.0000000'
这句话“您可以看到,在函数转换中不受影响时的结果大小写。”恐怕毫无意义。我想你要问的是为什么值'
显示为00:00:00.0000000
根据文件规定:
从中的类型集中返回优先级最高的类型
结果\u表达式和可选的else\u结果\u表达式。更多
有关详细信息,请参阅
如果我们也参考上述链接文档,则会提供(当前)数据类型的先例:
SQL Server对数据类型使用以下优先顺序:
请注意,
time
比varchar
具有更高的优先级,因此您的值'
被隐式转换为time
,并且CONVERT(time')='00:00:00.0000000'
case
表达式将只返回一个类型
,在第一个版本中,您有两个类型
一个是varchar
,另一个是time
如果我们查看类型的优先级
,则时间
的优先级高于变量字符
因此,您需要转换:
select id,
(case when name is null
then ' '
else cast(CAST((LEFT(name,2)+ ':' + SUBSTRING(name,3,2)+':00') AS TIME) as varchar(255))
end) as test,
name
from v_test;
case
表达式将只返回一个类型
,在第一个版本中,您有两个类型
一个是varchar
,另一个是时间
如果我们查看类型的优先级
,则时间
的优先级高于变量字符
因此,您需要转换:
select id,
(case when name is null
then ' '
else cast(CAST((LEFT(name,2)+ ':' + SUBSTRING(name,3,2)+':00') AS TIME) as varchar(255))
end) as test,
name
from v_test;
大小写
表达式生成的值必须是特定类型的值,该值基于所有THEN
子句和ELSE
中的所有可能类型time
的优先级高于(n)(var)char
(并且time
无论如何不能包含空字符串)由大小写
表达式生成的值必须是特定的类型,它基于所有然后子句和其他
中的所有可能类型<代码>时间
的优先级高于(n)(var)char
(并且时间
无论如何不能包含空字符串)