【问题标题】:SQL query adjusts the string columnSQL查询调整字符串列
【发布时间】:2021-06-16 06:12:39
【问题描述】:

只是我上一个主题的延续。 我有桌子:

id values
1 2;1|3;5|4;8|9;8|10;12
2 0;2|1;3|5;6
3 3;5|1;5|4;7|6;9

列值是 varchar,我需要修改,分别获取每个数字

我不在乎是在新列中还是在同一列中作为单独的值。

id values
1 2
1 1
1 3
1 5
1 4
1 8
1 9
1 8
1 10
1 12

id values x1 y1 x2 y2 x3 y3 x4 y4 x5 y5
1 2;1|3;5|4;8|9;8|10;12 2 1 3 5 4 8 9 8 10 12

这两种解决方案对我来说都很棒。 我试图在 sql 级别实现这一点,并可能使用 ssis:

SELECT values,
        SUBSTRING(values, 1, CHARINDEX(';', values)-1) AS x1,
        SUBSTRING(values,1,CHARINDEX(';', values)+1) AS y1
       /*CONVERT(float,STUFF(values,1,CHARINDEX(';',values),'')) AS y1
       CONVERT(float,LEFT(UserGuid,CHARINDEX(';',UserGuid)-1)) AS x1
      ,CONVERT(float,LEFT(UserGuid,CHARINDEX(';',UserGuid)-1)) AS x2,
       ,SUBSTRING(UserGuid, CHARINDEX(';', UserGuid) + 1, 1000) AS y2 */
FROM table

但有人告诉我,这在 sql 级别很难实现。

可能需要使用一些辅助脚本进行此调整,任何想法和建议对我来说都会很棒。 谢谢

【问题讨论】:

  • 我建议在 SQL Server 之外进行这项清理工作(例如,使用 Java、PHP、Notepad++ 等),然后重新导入数据。数据库不能很好地处理这个问题。
  • @TimBiegeleisen 和例如一些 python 脚本你认为也可以吗?
  • @DaleK 抱歉,我已经添加了我的问题。我对想法比对解决方案更感兴趣,而不是对解决方案本身感兴趣。所以你不要误会我的意思。
  • @DaleK 当然。但是,例如,当问题无法按照我想要的方式解决时。我必须更改解决方案,但问题仍然存在。在这种情况下,我很高兴收到建议。

标签: python sql sql-server


【解决方案1】:

您可以使用STRING_SPLIT 两次,这会为您获取行中的所有值:

SELECT t.id, s2.[value]
FROM Yourtable t
CROSS APPLY STRING_SPLIT(t.values, '|') s1
CROSS APPLY STRING_SPLIT(s1.[value], ';') s2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    相关资源
    最近更新 更多