SQL Server,选择具有不同转换的 CASE

标签 sql sql-server select casting

我想做一个仅针对特定 ID 进行强制转换的选择,但它似乎不起作用。

示例:

SELECT
  CASE
    WHEN(@ID <> 1) THEN Code
    WHEN(@ID = 1) THEN Cast(Code AS int)
  END Code FROM ....

有什么想法吗?

最佳答案

为什么要这样做? SQL Server 表达式具有单一固定类型。换句话说,单个表达式不能是 varchar(50)int,具体取决于表达式的计算方式。您可以将每种情况转换为 sql_variant,但这可能有意义也可能没有意义,具体取决于您想要执行的操作。

编辑

如果您从存储过程执行此查询,则可以创建一个 IF..ELSE block 来根据 @ID 的值执行不同版本的查询。例如:

IF (@ID = 1) BEGIN
    SELECT Cast(Code AS int) AS Code FROM ...
END
ELSE BEGIN
    SELECT Code FROM ...
END

关于SQL Server,选择具有不同转换的 CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2826732/

相关文章:

sql-server - SQL Server SELECT 嵌套

linux - 为什么 nginx 的性能比 apache httpd 服务器更好?

Mysql ( Doctrine ) - 计算计数 > X 的内连接

sql - 计算属于特定类型的条目

sql-server - 嵌套循环(内部连接)成本为 83%。有没有办法以某种方式重写它?

sql-server - 如何在 SQL Server 中结合水平和垂直分区

mysql选择数组中的数组

sql - MySQL 查询和文本搜索

sql - 按列中的行号分组

ASP.NET Web 应用程序死锁 - 认为这是由 SQL Server 锁定引起的