【发布时间】: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