SQL情况当具有2种不同类型的输出时



table

c1     c2  c3
'a1'   1   'hi'
'b1'   2   'hee'
'c1'   3   null

当我做

select case when c3 is null then c2 else c1 end from Table

我会在转换时获得"转换失败"错误。

我知道这种情况何时只能返回1类型,但是有没有办法将VARCHAR转换为INT/Tinyint?如果没有,有其他方法吗?

select case when c3 is null then CAST(c2 AS VARCHAR(10)) else c1 end from Table

您正在混合数字和字符串数据类型。您将被要求用作字符串VARCHARCHAR等。

通过投放您的数字数据CAST(c2 AS VARCHAR(10))您可以解决问题。

我猜想很有趣,要在SQL-Server中更准确,您可以将其保留为integer,但是它需要cast as sql_variant,这将使整个字段成为sql_variant,并在此后进行任何用途,并且您将获得 0益处,因为您可以始终测试IIF(ISNUMERIC(CASE)=1,CAST(value as INT),NULL) ....这个答案可能太多了。

DECLARE @Table AS TABLE (C1 CHAR(2), c2 INT, c3 VARCHAR(4))
INSERT INTO @Table (C1, c2, c3)
VALUES ('a1', 1, 'hi'), ('b1',2,'hee'),('c1',3,null)
SELECT *
    ,CASE WHEN c3 is null THEN CAST(c2 AS sql_variant) else c1 end
FROM
    @Table

从您的示例数据中,看起来最好转换为varchar而不是int,因为取决于C3中的值,输出要么是字符串或整数。整数始终可以转换为VARCHAR,但是如果是一个数字,则只能将VARCHAR转换为整数。通过检查,C1中的项目不是数字。您可以使用转换或铸件功能。

(代表OP发布)。

我猜想除了将其转换为int to varchar之外,别无其他方式。但是int> varchar作品。

最新更新