假设我有一个字段UserAddedInfo,其字符串为“用户已添加到系统并在2016年5月16日由User Annon从列表中删除”,并在同一个表中添加了字段DateAdded。
SQL中是否有任何方法可以从字符串字段中提取16/05/2016日期并将其作为日期时间插入DateAdded字段?
字符串中的日期始终为dd / MM / yyyy。
谢谢!
答案 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)