如何在第一个重新设置字符之前提取SQL中的部分字符串?

如何在第一个重新设置字符之前提取SQL中的部分字符串?,sql,sql-server,substring,partial,Sql,Sql Server,Substring,Partial,我在SQl中有以下混合值的行 322600;323800;325000;326200;327400;329200 0;0;0;0;0;0 1184168;1188182;1192196;1196210;1200224;1204238 0;0;0;0;0;0 0;0;0;0;0;0 我只需要获取第一个分号之前的值,即 322600 0 1184168 0 0 我试过: ,LEFT ([UtilizeProperties],CHARINDEX(';',[CalcTotGrossIncome])-

我在SQl中有以下混合值的行

322600;323800;325000;326200;327400;329200
0;0;0;0;0;0
1184168;1188182;1192196;1196210;1200224;1204238
0;0;0;0;0;0
0;0;0;0;0;0
我只需要获取第一个分号之前的值,即

322600
0
1184168
0
0
我试过:

,LEFT ([UtilizeProperties],CHARINDEX(';',[CalcTotGrossIncome])-1) 
但我只得到3个第一位数

,SUBSTRING([UtilizeProperties],CHARINDEX(';',[UtilizeProperties])-1,LEN([UtilizeProperties])-CHARINDEX(';',[UtilizeProperties])) 
将我的第一个值设为0和

,SUBSTRING([UtilizeProperties],CHARINDEX(';',[UtilizeProperties])+1,LEN([UtilizeProperties])) 
把他们全部带走

感谢你的忠告


我使用SQL Service Management Studio

您的第一种方法是正确的,只是您在
左侧
CHARINDEX中使用了不同的列。这样改变:

LEFT(UtilizeProperties,NULLIF(CHARINDEX(“;”,UtilizeProperties),0)-1)

您可以尝试以下查询

此函数用于在第二个字符表达式中搜索一个字符表达式,如果找到,则返回第一个表达式的起始位置

语法

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
要获取所有值,需要将
UNION
替换为
UNION all
。您可以在最终查询中添加
orderby
子句来对值进行排序

with cte (SampleData) as
(
select '322600;323800;325000;326200;327400;329200'
union
select '0;0;0;0;0;0'
union
select '1184168;1188182;1192196;1196210;1200224;1204238'
union
select '0;0;0;0;0;0'
union
select '0;0;0;0;0;0'
)
SELECT 
        CAST(LEFT(SampleData, CHARINDEX(';', SampleData)-1) AS INT) OutputValue
From cte

这是演示。

用您正在使用的数据库标记您的问题。您好,非常感谢您的及时回复,是的(UtilitizeProperties,NULLIF(CHARINDEX(“;”,UtilitizeProperties),0)-1)已起作用。:-)干杯