从字符串中提取日期并插入到字段Microsoft SQL Server 2012中

时间:2016-08-04 14:04:03

标签: sql sql-server date parsing extract

假设我有一个字段UserAddedInfo,其字符串为“用户已添加到系统并在2016年5月16日由User Annon从列表中删除”,并在同一个表中添加了字段DateAdded。

SQL中是否有任何方法可以从字符串字段中提取16/05/2016日期并将其作为日期时间插入DateAdded字段?

字符串中的日期始终为dd / MM / yyyy。

谢谢!

2 个答案:

答案 0 :(得分:3)

使用PATINDEX获取列中日期字符串的起始位置,并从该位置提取10个字符。要将提取的字符串转换为date,请使用格式为CONVERT的{​​{1}}。

  

103 = dd / mm / yyyy

103

要更新表格中的dateadded字段,请使用

select 
convert(date,
substring(UserAddedInfo,patindex('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]%',UserAddedInfo),10)
      ,103)
from table_name
where patindex('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]%',UserAddedInfo) > 0

当子字符串返回无效日期时,使用update table_name set dateadded = convert(date, substring(UserAddedInfo,patindex('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]%',UserAddedInfo),10) ,103) where patindex('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]%',UserAddedInfo) > 0 try_cast返回try_convert

null

答案 1 :(得分:0)

您可以使用patindex查找日期字符串,并使用强制转换将其转换为日期时间

select 
    cast(substring('User was added to the system and removed from list on 27/08/2014 by User Annon', 
        patindex('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]%', 
                 'User was added to the system and removed from list on 27/08/2014 by User Annon'), 10) as datetime)