使用MSSQL中的子字符串更新操作

时间:2013-12-06 08:51:32

标签: c# sql .net sql-server

我的MSSQL中有下表。

itemNo        itemDesc                 ComponentType    Voltage
100001LF    CAP CER 10n 25V 20% 0805    CAPACITOR   NULL
100002LF    CAP CER 10n 50V 20% 1206    CAPACITOR   NULL
100008LF    CAP CER 100n 25V 20% 0805   CAPACITOR   NULL
100012LF    CAP CERAM 1n 25V 20% 0805   CAPACITOR   NULL
100013LF    CAP CER 100n 25V 20% 0805   CAPACITOR   NULL

现在,如何确定itemDesc的电压并将其输入电压?

注意:电压可以这样确定:搜索字母V,在看到空格之前拍摄所有字符。

我最初的尝试是这样的:[但是,没有奏效:(]

UPDATE dbo.capacitor

SET [Voltage] = CASE WHEN CHARINDEX('% ', ItemDesc) > 0 THEN SUBSTRING(itemDesc, CHARINDEX['V ', ItemDesc], CHARINDEX['V ',ItemDesc]+2)
                      ELSE null
END

(我正在使用C#编写代码。但是,我希望这个操作可以在SQL Server本身完成,而不是使用C#来获取每个记录,处理并将其放回去。)

2 个答案:

答案 0 :(得分:3)

我想在C#中会更容易,但这是一个可以在SQL中运行的解决方案。它会反转字符串并在空格后查找V并将所有内容移至下一个空格然后将其反转。

declare @desc as varchar(100) = 'CAP CER 10n 25V 20% 0805'

select REVERSE(SUBSTRING(REVERSE(@desc),
    charindex(' V', REVERSE(@desc)) + 2,
    CHARINDEX(' ', REVERSE(@desc), charindex(' V', REVERSE(@desc)) + 1) - charindex(' V', REVERSE(@desc)) - 2))

答案 1 :(得分:1)

UPDATE dbo.capacitor
SET [Voltage] = CASE WHEN CHARINDEX('% ', itemDesc) > 0 THEN SUBSTRING(itemDesc, CHARINDEX('n', itemDesc) + 1, CHARINDEX('V ',itemDesc) - (CHARINDEX('n', itemDesc) + 1))
ELSE null END 
END