我在SCCM数据库中搜索已发布的应用程序
我得到了这个输出
163net_YoudaoDictionary_5.0_ZH_x32_CN_W10
但我希望它是
163net YoudaoDictionary 5.0
所以我需要在_XX
之后删除所有内容的方法(XX是一些字符串)
我使用PATINDEX('%_[A-Z]%',la.DisplayName)
来检测_XX的出现但是如何指示LEFT函数删除所有PATINDEX结果后的所有> 1
答案 0 :(得分:3)
使用此:
DECLARE @DataSoruce TABLE
(
[value] NVARCHAR(4000)
);
INSERT INTO @DataSoruce ([value])
VALUES ('163net_YoudaoDictionary_5.0_ZH_x32_CN_W10')
SELECT REPLACE(SUBSTRING([value], 0, PATINDEX('%[_][A-Z][A-Z]%',[value] COLLATE Latin1_General_100_BIN2)), '_', ' ')
FROM @DataSoruce;
答案 1 :(得分:2)
您可以使用Substring()
Patindex()
函数来查找模式(即_XX)&替换为' '
&然后使用'_'
' '
DECLARE @DATA NVARCHAR(MAX)
SET @DATA = '163net_YoudaoDictionary_5.0_ZH_x32_CN_W10'
SELECT REPLACE(REPLACE(@DATA, SUBSTRING(@DATA, PATINDEX('%_ZH%', @DATA), LEN(@DATA)), ''), '_', ' ');
结果:
163net YoudaoDictionary 5.0
答案 2 :(得分:2)
试试这个:
declare @str varchar(100)
set @str = '163net_YoudaoDictionary_5.0_ZH_x32_CN_W10'
select REPLACE(LEFT(@str, PATINDEX('%[_][A-Z][^a-z]%',@str COLLATE SQL_Latin1_General_CP1_CS_AS) - 4), '_', ' ')
基本上,您需要使用此类正则表达式'%[_][A-Z][^a-z]%'
来查找所需内容并将搜索到的字符串排序设置为区分大小写,例如SQL_Latin1_General_CP1_CS_AS
。
答案 3 :(得分:1)
如果您的字符串的格式和长度始终相同,那么您可以使用SUBSTRING()
和REPLACE()
函数:
DECLARE @Type NVARCHAR(MAX) = N'163net_YoudaoDictionary_5.0_ZH_x32_CN_W10';
SELECT SUBSTRING(REPLACE (@Type, '_', ' '), 0, 28) AS Result;
使用 REPLACE() 将_
替换为空格' '
。
使用 SUBSTRING() 从字符串中剪切所需的字符串。
如果您想使用PATINDEX()
:
SELECT REPLACE(SUBSTRING(@Type, 0, PATINDEX('%[_][A-Z][A-Z][_]%', @Type) ), '_', ' ') AS Result;
更新
您没有提供示例数据,但这是一个示例:
CREATE TABLE MyData (
STR NVARCHAR(MAX)
);
INSERT INTO MYData VALUES
(N'163net_YoudaoDictionary_5.0_ZH_x32_CN_W10'),
(N'164net_YoudaoDictionary_4.0_HZ_x86_CN_W10_UD78_KIU7'),
(N'165net_YoudaoDictionary_4.1_ZH_x32'),
(N'166net_YoudaoDictionary_3.0_LF_x32_KO_X16'),
(N'167net_YoudaoDictionary_1.0_EX_x86_RW_B28');
SELECT REPLACE(SUBSTRING(STR, 0, PATINDEX('%[_][A-Z][A-Z][_]%', STR) ), '_', ' ') AS Result
FROM MyData;
结果:
+-----------------------------+
| Result |
+-----------------------------+
| 163net YoudaoDictionary 5.0 |
| 164net YoudaoDictionary 4.0 |
| 165net YoudaoDictionary 4.1 |
| 166net YoudaoDictionary 3.0 |
| 167net YoudaoDictionary 1.0 |
+-----------------------------+
答案 4 :(得分:0)
样本表:
DECLARE @temp TABLE (
string nvarchar(max)
)
INSERT INTO @temp VALUES
(N'163net_YoudaoDictionary_5.0_ZH_x32_CN_W10'),
(N'157org_WhateverDictionary_7.0_smth_KJ_x64_WN_W7'),
(N''),
(NULL)
脚本:
SELECT RTRIM(REPLACE(LEFT(string,PATINDEX('%[_][A-Z][A-Z][_]%',string COLLATE Latin1_General_100_BIN2)),'_',' '))
FROM @temp
输出:
(No column name)
163net YoudaoDictionary 5.0
157org WhateverDictionary 7.0 smth
NULL
说明:
我想你知道什么代表RTRIM,REPLACE,LEFT,PATINDEX。 COLLATE Latin1_General_100_BIN2
二进制排序规则意味着搜索是一种直接的字节比较,显然更快。更多here 二进制排序规则部分。
答案 5 :(得分:0)
好的,我找到了一个解决方案:SCCM数据库中有视图fn_LocalizedAppProperties(1033),列标题需要通过CI_ID将其与fn_ListLatestApplicationCIs(1033)连接起来
感谢大家的建议!!