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
您正在混合数字和字符串数据类型。您将被要求用作字符串VARCHAR
,CHAR
等。
通过投放您的数字数据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作品。