日期:2014-05-18  浏览次数:20556 次

sql截取字符串替换字段
item1= '\r\n\r\n\r\n贵阳市公安交通管理局\r\n2011年10月28日\r\n\r\n\r\n', 

item2='2012-2-22 00:00:00', 

id='1CE5D989-1C1E-4667-83D0-FF43AEF41BDB'

我现在想要实现的就是将item1中的n2011年10月28日截取出来,根据ID将item2替换成2011-10-28 00:00:00
该如何写这个sql语句啊,请指教,因为数据太多了,一条一条修改要整死人,请大侠些指教哈。

------解决方案--------------------
数据格式统一吗?
后几位都是
\n2011年10月28日\r\n\r\n\r\n'
这种格式吗
------解决方案--------------------
格式统一吗 不统一的话就没有规律就没办法写
------解决方案--------------------
SQL code
declare @a nvarchar(100);
set @a =  '\r\n\r\n\r\n贵阳市公安交通管理局\r\n2011年10月28日\r\n\r\n\r\n'
select left(right(@a,24),12)

------解决方案--------------------
探讨

引用:

SQL code
declare @a nvarchar(100);
set @a = '\r\n\r\n\r\n贵阳市公安交通管理局\r\n2011年10月28日\r\n\r\n\r\n'
select left(right(@a,24),12)

\n2011年11月04日\r
这个格式是统一的

------解决方案--------------------
SQL code
declare @a nvarchar(100);
set @a =  '\r\n\r\n\r\n贵阳市公安交通管理局\r\n2011年10月28日\r\n\r\n\r\n';
declare @b nvarchar(20);


set @b = right(left(right(@a,24),12),11)
select @b

select convert(datetime,left(@b,4) + '-' + right(left(@b,7),2) + '-' + left(right(@b,3),2))

------解决方案--------------------
SQL code
declare @a nvarchar(100);
set @a =  '\r\n\r\n\r\n贵阳市公安交通管理局\r\n2011年10月28日\r\n\r\n\r\n'
select left(right(@a,24),12)

select left(SUBSTRING(@a,27,27),11)

-----------
2011年10月28日

(1 行受影响)

------解决方案--------------------
探讨

我表达没清楚
item1= '\r\n\r\n\r\n贵阳市公安交通管理局\r\n2011年10月28日\r\n\r\n\r\n',
这个时间是不一定的,有可能其他数据是\r\n2012年11月22日\r\n\r\n\r\n',
我只是想吧item1里的这个时间替换成item2的时间

------解决方案--------------------
SQL code
create function dbo.f_split
(
    @str    nvarchar(100)
)
returns datetime
as
begin
    declare @b nvarchar(20);
    declare @date datetime;
    set @b = right(left(right(@str,24),12),11)

    
    set @date = convert(datetime,left(@b,4) + '-' + right(left(@b,7),2) + '-' + left(right(@b,3),2))
    
    return @date
end

select dbo.f_split('\r\n\r\n\r\n贵阳市公安交通管理局\r\n2012年10月28日\r\n\r\n\r\n')

--更新的时候直接调用函数就行

update tb set item2 = dob.f_split(item1) where id = ''