【问题标题】:SQL - Update a field with part of a string from another fieldSQL - 使用来自另一个字段的部分字符串更新一个字段
【发布时间】:2018-03-07 02:41:46
【问题描述】:

我不确定这是否可以用正则表达式或其他一些奇特的解决方案以外的任何方法来完成,但这是我需要做的。

A 列:标准 SQL 日期时间值

B 列:具有我需要从中提取数据的值的 varchar 字段

典型的 B 列值如下所示: 这里有一些关于这个文档的cmets 创建日期:2011-08-17T20:10:33Z 修改日期:2011-06-22T17:54:23Z

创建日期/修改日期来自另一个系统并插入此字段以供最终用户查看。

我想做的是提取创建日期值并更新 A 列以匹配。我意识到我需要做一些日期时间格式转换,但是这个脚本到底有多难?我想不出一种方法来从该字符串中提取 Create Date: 2011-08-17T20:10:33Z 并将其用作更新列 A 的值。如果转换该日期值证明太难了,只使用日期部分是可以接受的,例如'2011-08-17'

谢谢!

【问题讨论】:

  • 你还没有说你到目前为止所尝试的!这是一个帮助您入门的提示.. DECLARE @x varchar(100) = 'blah blah 创建日期:2011-08-17T20:10:33Z 修改日期:2011-06-22T17:54:23Z'; SELECT @x original_data , CHARINDEX('Date:',LTRIM(RTRIM(@x))) FirstIndexOfdate ,CHARINDEX('Date:',LTRIM(RTRIM(@x)), (CHARINDEX('-', LTRIM(RTRIM( @x)) )+1)) SecondIndexOfdate GO 看看我要去哪里??
  • 谢谢。我没有发布任何内容的主要原因是我不擅长正则表达式。因此,如果正则表达式是唯一的方法,那么我将需要找到正确执行此操作的帮助。你认为这是唯一的选择吗?
  • 一点也不……我上面的代码将为您提供第一个日期的位置:和第二个日期:在列内..您应该能够基于此提取值。试一试,看看你能不能得到价值。否则可以提供更多帮助。这样可能比在代码中给你确切的答案更好。
  • 试试看是否可行------------------------ -------------------------------------------------- -------------- DECLARE @x varchar(100) = 'blah blah 创建日期:2011-08-17T20:10:33Z 修改日期:2011-06-22T17:54:23Z' ; SELECT @x original_data , CHARINDEX('Date:',LTRIM(RTRIM(@x))) FirstIndexOfdate ,CHARINDEX('Date:',LTRIM(RTRIM(@x)), (CHARINDEX('Date:', LTRIM(RTRIM (@x)) )+1)) SecondIndexOfdate ,substring (@x,CHARINDEX('Date:',LTRIM(RTRIM(@x)))+5,11) first_date ,substring (@x,CHARINDEX('Date: ',LTRIM(RTRIM(@x)), (CHARINDEX('日期:', LTRIM(RTRIM(@x)) )+1)) +5,11) second_date
  • 非常感谢您帮助我从这里开始!非常感谢您的提示。明天将花时间修补这个以获得结果。你摇滚!

标签: sql-server string date datetime sql-update


【解决方案1】:

尝试看看这是否可行。基本上这会找到第一个日期并从那里获取值,然后是第二个日期和之后的值。这假设您的所有条目都遵循与您指定的格式相同的格式。

DECLARE @x varchar(100) = 'blah blah Create Date: 2011-08-17T20:10:33Z Modify Date: 2011-06-22T17:54:23Z';

SELECT @x original_data 

, CHARINDEX('Date:',LTRIM(RTRIM(@x))) FirstIndexOfdate 

,CHARINDEX('Date:',LTRIM(RTRIM(@x)), (CHARINDEX('Date:', LTRIM(RTRIM(@x)) )+1)) SecondIndexOfdate 

,substring (@x,CHARINDEX('Date:',LTRIM(RTRIM(@x)))+5,11) first_date 

,substring (@x,CHARINDEX('Date:',LTRIM(RTRIM(@x)), (CHARINDEX('Date:', LTRIM(RTRIM(@x)) )+1)) +5,11) 

【讨论】:

    猜你喜欢
    • 2020-06-12
    • 1970-01-01
    • 2011-05-11
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多