请您协助解决令人困惑的字符串运算符问题? 我需要从表dbo.Log解析一个名为MachineName的NVARCHAR(32),而不是空列。格式为:
我需要结果集(作为[代码])为 CCC 或 CCCC 。
我查阅了这篇文章:
http://basitaalishan.com/2014/02/23/removing-part-of-string-before-and-after-specific-character-using-transact-sql-string-functions/
使用此代码: SELECT DISTINCT [MachineName] ,REPLACE(SUBSTRING([MachineName],CHARINDEX(' - ',[MachineName],6),LEN([MachineName])),' - ','')AS [代码] 来自[dbo]。[日志]
我当前的结果集在左侧很好,但右侧需要改进。
我会非常感谢你的帮助!提前谢谢
答案 0 :(得分:0)
您可以即兴发挥:http://sqlfiddle.com/#!3/9eecb7d/588
with test as (
select cast('AA-BBB-CCC-DDD' as nvarchar(32)) as field1
union all
select cast('AA-BBB-CCCC-DDD' as nvarchar(32)) as field1
union all
select cast('AA-BBB-CCC-DDDD' as nvarchar(32)) as field1
union all
select cast('AA-BBB-CCCC-DDDD' as nvarchar(32)) as field1
)
select
substring(
substring(field1,8,32),
1,
charindex('-', substring(field1,8,32))-1
)
from test
结果:
CCC
CCCC
CCC
CCCC
使用子字符串,我们忽略前7个字符并从第8个字符开始。这会给我们CCCC-DDD
等等。 charindex
会告诉我们-
在CCCC-DDD
等中的位置。我们在子串上重新应用子串;从第一个位置开始并全部捕获,直到找到-
。
在你的情况下,你可以这样做:
select distinct
substring(
substring(MachineName,8,32),
1,
charindex('-', substring(MachineName,8,32))-1
) as Code
from dbo.Log