22,297
社区成员




DECLARE @dt nvarchar(50)
SET @dt = '2016年7月8日上午1时2分3秒'
SELECT CONVERT(date,REPLACE(REPLACE(SUBSTRING(@dt,
1, CHARINDEX('日',@dt)-1), '年', '-'), '月', '-'), 120)
--------------------------------------------------------------------------------
2016-07-08
create table 表(dt varchar(100))
insert into 表(dt)
select '2016年7月22日 下午6时23分24秒' union all
select '2016年7月22日 上午4时5分6秒'
-- 建函数
create function dbo.fn_conv2Datetime
(@x varchar(100)) returns datetime
as
begin
declare @y datetime,@sx bit
select @x=replace(@x,'年','-')
select @x=replace(@x,'月','-')
select @x=replace(@x,'日','')
select @x=replace(@x,'时',':')
select @x=replace(@x,'分',':')
select @x=replace(@x,'秒','')
select @sx=case when charindex('上午',@x)>0 then 0 else 1 end
select @x=replace(@x,'上午',' ')
select @x=replace(@x,'下午',' ')
select @y=cast(@x as datetime)
select @y=case when @sx=1 then dateadd(hh,12,@y) else @y end
return @y
end
-- 结果
select dt,
new_dt=dbo.fn_conv2Datetime(dt)
from 表
/*
dt new_dt
---------------------------------------- -----------------------
2016年7月22日 下午6时23分24秒 2016-07-22 18:23:24.000
2016年7月22日 上午4时5分6秒 2016-07-22 04:05:06.000
(2 row(s) affected)
*/
declare @date nvarchar(50)= '2014年05月01日 下午1时20分21秒';
select case when @date like '%上午%'
then convert(datetime,replace(replace(replace(replace(replace(replace(replace(@date,
'年','-'),'月','-'),
'日',''),'下午',''),
'时',':'),'分',':'),
'秒',''))
else dateadd(hh,12,
convert(datetime,replace(replace(replace(replace(replace(replace(replace(@date,
'年','-'),'月','-'),
'日',''),'下午',''),
'时',':'),'分',':'),
'秒','')))
end;