c# - MSSQL中子字符串的更新操作

标签 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# 获取每条记录、处理并将其放回)。

最佳答案

我想这在 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))

关于c# - MSSQL中子字符串的更新操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20419675/

相关文章:

C# XPath 找不到任何东西

c# - 为什么我的 .NET 6 Minimal API 不能反序列化 POST 正文?

c++ - Firebird 远程连接失败

asp.net - 从ASP.NET访问 "user instance"数据库时用户权限错误

c# - asp.net 应用程序中的 MySQL 连接器引用

sql - 在 Access 查询中调用 VBA 函数

MySQL:选择查询,5 分钟增量

C# List<Object>.Equals 对象比较失败

c# - 页面生命周期中的 .net ViewState

c# - 继承多个接口(interface)的类如何设置DataTemplate?