【问题标题】:How to extract part of string in SQL before first of the repaeting characters?如何在第一个重复字符之前提取 SQL 中的部分字符串?
【发布时间】:2020-03-11 12:16:12
【问题描述】:

我在 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

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql sql-server substring partial


【解决方案1】:

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

LEFT(UtilizeProperties, NULLIF(CHARINDEX(';', UtilizeProperties), 0) - 1)

【讨论】:

  • 嗨,非常感谢您的及时回复,是的 LEFT(UtilizeProperties, NULLIF(CHARINDEX(';', UtilizeProperties), 0) - 1) 有效。 :-) 干杯。
【解决方案2】:

你可以试试下面的查询CHARINDEX (Transact-SQL)

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

语法

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

要获取您需要将UNION 替换为UNION ALL 的所有值。您可以在最终查询中添加order by 子句以对值进行排序。

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

这是db<>fiddle 演示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-29
    • 2023-04-01
    • 1970-01-01
    • 2022-01-18
    • 2012-02-06
    • 2016-09-05
    • 1970-01-01
    • 2010-12-28
    相关资源
    最近更新 更多