INSERT INTO SELECT 使用 udf 的子查询,使其返回 1 个值

问题描述 投票:0回答:1

我正在尝试创建一个新表,但使用 INSERT INTO SELECT 语句更改旧表中的一些数据。我正在尝试获取一个包含数字和字母的字段,取出数字并根据数字是否代表天、小时或分钟来乘以这些数字,然后将结果插入到我的新表中。

我找到了一个用户定义的函数来获取数字,www.geeksforgeeks.org/sql-query-to-get-only-numbers-from-a-string/。虽然该函数在 SELECT 语句中工作,但当我将它用作子查询中的表达式时,它会失败,因为它返回的值超过 1 个。如何重写子查询以使其仅返回 1 个值?或者有更好的方法来实现我想要的吗?

我使用该函数的列称为“持续时间”。该列是 VARCHAR,包含“浓度,最多 1 小时”和“24 小时”等数据。 我尝试使用 EXEC 而不是 SELECT,但出现多个语法错误。

CASE
    WHEN s.duration IN ('Instantaneous')
        THEN '0'

    WHEN s.duration LIKE '%round%'
        THEN '1'

    WHEN s.duration LIKE '%minute%'
        THEN (SELECT dbo.getNumericValue(duration) * 10 from Spell.Spells WHERE duration LIKE '%minute%')                                                                                                                                  
        
    WHEN s.duration LIKE '%hour%'
        THEN  (SELECT dbo.getNumericValue(duration) * 600 from Spell.Spells  WHERE duration LIKE '%hour%')

    WHEN s.duration LIKE '%day%'
        THEN (SELECT dbo.getNumericValue(duration) * 14400 from Spell.Spells WHERE duration LIKE '%day%')

    ELSE s.duration
END AS duration,
        ritual,
        verbal,
        somatic,
        material,
        material_component,
        material_cost,
        material_consumed,
        description,
        source
    FROM Spell.Spells AS s
sql sql-server subquery sql-insert user-defined-functions
1个回答
0
投票

类似这样的:

CASE
    WHEN s.duration IN ('Instantaneous')
        THEN 0

    WHEN s.duration LIKE '%round%'
        THEN 1

    WHEN s.duration LIKE '%minute%'
        THEN dbo.getNumericValue(duration) * 10                                                                                                            
        
    WHEN s.duration LIKE '%hour%'
        THEN  dbo.getNumericValue(duration) * 600 

    WHEN s.duration LIKE '%day%'
        THEN dbo.getNumericValue(duration) * 14400 

    ELSE cast(s.duration as int)
END AS duration,
        ritual,
        verbal,
        somatic,
        material,
        material_component,
        material_cost,
        material_consumed,
        description,
        source
    FROM Spell.Spells AS s
© www.soinside.com 2019 - 2024. All rights reserved.