【问题标题】:Cleansing data on SQL - String清理 SQL 上的数据 - 字符串
【发布时间】:2021-11-03 06:30:46
【问题描述】:

我正在尝试清理我的 SQL 数据。我的示例数据如下:

能否请您告诉我如何删除日期时间部分?谢谢,

https://docs.google.com/spreadsheets/d/1BvVxU0_a53vncGpd0Mbr57WPUbG89MgfpYGah0JBdIA/edit?usp=sharing

【问题讨论】:

  • 您的数据来源在哪里?您使用哪种语言?您是插入清理后的数据还是选择显示它?从源中排除不需要的数据可能更容易。
  • 我想清理 Microsoft SQL 上的数据。
  • 有没有一种叫做“微软”的SQL?恐怕没有。
  • 无法打开文档。在谷歌驱动器上打开文档,生成一个可共享的链接,然后将其发布在这里。

标签: sql sql-server data-cleaning


【解决方案1】:

SQL Server 不是特别擅长字符串操作。

但是,根据您问题中的示例,“清理”是删除前 11 个字符或后 13 个字符,具体取决于日期所在的位置。幸运的是,这实际上是您可以在 SQL Server 中执行的操作:

select t.*,
       (case when data like '% ([0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9])'
             then left(data, len(data) - 13)
             when data like '[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9] %'
             then stuff(data, 1, 11, '')
             else data
        end) as cleaned_data
from t;

【讨论】:

    【解决方案2】:

    您可以使用此正则表达式来选择要删除的日期时间:

    (\(?[0-9]{2}\/){2}([0-9]{4}\)?)
    

    然后将那部分字符串替换为空格,和删除一样。

    要了解如何在带有正则表达式的 SQL 中使用替换方法,请查看answer

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2021-12-28
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多