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

是否可以在CTE中设置显式类型?

  •  0
  • David542  · 技术社区  · 3 年前

    我可以创建一个CTE,其中包含推断类型的命名列,使用:

    WITH employees(name, salary) AS (
        SELECT 'Paul', 10000
    ) SELECT * FROM employees
    

    是否有方法在CTE本身中指定类型,例如:

    WITH employees(name , salary DECIMAL(8,2)) AS (
        SELECT 'Paul', 10000
    ) SELECT * FROM employees
    

    还是必须始终在SELECT语句中执行,例如:

    WITH employees(name, salary) AS (
        SELECT 'Paul', DECIMAL(8,2) '10000'
    ) SELECT * FROM employees
    
    2 回复  |  直到 3 年前
        1
  •  5
  •   a_horse_with_no_name    3 年前

    您可以在CTE中强制转换值:

    WITH employees(name, salary) AS (
      select 'Paul', cast(10000 as decimal(8,2))
    ) 
    SELECT * 
    FROM employees
    

    或者使用VALUES子句来消除对 UNION 如果需要多行。

    WITH employees(name, salary) AS (
      values 
         ('Paul', cast(10000 as decimal(8,2))), 
         ('Peter', 5000)
    ) 
    SELECT * 
    FROM employees
    

    只在第一行中需要强制转换,因为它为VALUES子句中的所有其他行(或带UNION的SELECT)定义了该列的数据类型

        2
  •  0
  •   Fabricio Araujo    3 年前

    我在中为您运行了SQL SQl Fiddle 而唯一 强制我找到的结果集中的类型的方法 如下所示:

    WITH employees(name , salary ) AS 
    (
    SELECT 'Paul', cast( 10000 as DECIMAL(8,2))
    ) 
    SELECT * FROM employees