代码之家  ›  专栏  ›  技术社区  ›  Mathieu

SQL Server,选择具有不同类型转换的案例

  •  2
  • Mathieu  · 技术社区  · 16 年前

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

    例子:

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

    有什么想法吗?

    3 回复  |  直到 16 年前
        1
  •  1
  •   hgulyan    16 年前

    它对我有用。检查是否 @身份证 是int类型,如果列的所有值 代码 可以铸造成 int .

    更新 如果有一个值不能强制转换为int,则查询将无法工作。

    因此,您可以编写两个不同的查询。

    史密斯式

    IF @id = 1 THEN
     SELECT code ...
    ELSE 
     SELECT Cast(Code AS int) as Code
    
        2
  •  2
  •   Daniel Pratt    16 年前

    为什么要这样做?SQL Server表达式具有单个固定类型。换句话说,单个表达式不能 varchar(50) int 取决于表达式的计算方式。你可以把每一个箱子 sql_variant 但是,根据你想做的事情,这可能有意义,也可能没有意义。

    编辑

    如果从存储过程执行此查询,则可以创建if..else块,以基于@id的值执行不同版本的查询。例如:

    IF (@ID = 1) BEGIN
        SELECT Cast(Code AS int) AS Code FROM ...
    END
    ELSE BEGIN
        SELECT Code FROM ...
    END
    
        3
  •  0
  •   Will Marcouiller    16 年前

    你也可以写:

    select case when @ID = 1 then CAST(Code as int) else Code end as Code
        from...
    

    顺便说一下,任何包含字母字符的数据都不会强制转换为int。

    如果您提供一些示例数据,告诉我们您想要实现什么,我们可以更好地帮助您吗?