从varchar获取datatime中的错误数据

时间:2018-01-03 11:25:07

标签: sql-server sql-server-2008 triggers

在数据库中有一个名为Tbl_GIT的表。数据从多个位置插入/更新。我得到的一些数据格式就像01/02/18 01:53:30 p. m.01/02/18 08:22:24 a. m.暂时我希望如果数据以这种格式插入/更新,我可以在插入/更新后使用触发器来纠正这个问题。提交的GT9和GT10在表中是varchar(50)。那我怎么能这样做呢。

以下是我的示例数据

ID            GT9                    GT10
 7686004401    12/8/17 4:33:36 PM     01/02/18 06:51:38 a. m. 
 6871761806    12/7/17 5:45:29 AM     01/02/18 12:03:33 p. m. 
 7694553943    12/21/17 7:22:59 AM    01/02/18 07:45:57 a. m.  
 7696265108    12/29/17 6:55:53 AM    01/02/18 12:38:24 PM
 696265124     12/28/17 8:19:30 PM    01/02/18 08:56:21 AM
 697024242     12/29/17 9:35:44 AM    01/02/18 05:25:28 AM

提前感谢您的帮助。

表DDL

CREATE TABLE [dbo].[Tbl_GIT] (
    [ORDERID]        INT           NOT NULL,
    [ID]             INT           IDENTITY (1, 1) NOT NULL,
    [GT1]        VARCHAR (255) NULL,
    [GT2]        VARCHAR (255) NULL,
    [GT3]        VARCHAR (255) NULL,
    [GT4]        VARCHAR (255) NULL,
    [GT5]        VARCHAR (255) NULL,
    [GT6]        VARCHAR (255) NULL,
    [GT7]        VARCHAR (255) NULL,
    [GT8]        VARCHAR (255) NULL,
    [GT9]        VARCHAR (255) NULL,
    [GT10]       VARCHAR (255) NULL,
    [GPSLONG]        VARCHAR (20)  NULL,
    [GPSLAT]         VARCHAR (20)  NULL   

);

1 个答案:

答案 0 :(得分:1)

下面的示例代码应将varchar字段GT10更新为所需的格式。

create table Tbl_GIT
(
ID int identity,
GT9 varchar(50),
GT10 varchar(50)
)
GO
insert into Tbl_GIT values ('12/8/17 4:33:36 PM','01/02/18 06:51:38 a. m.'),('12/29/17 6:55:53 AM','01/02/18 12:38:24 PM')

select * from Tbl_GIT
GO
create trigger tr_tmp_Insert on Tbl_GIT after insert
as
begin
    IF EXISTS(SELECT 1 FROM inserted WHERE GT10 LIKE '%p. m.' OR GT10 LIKE '%p.m.' OR GT10 LIKE '%a. m.' OR GT10 LIKE '%a.m.')
    BEGIN
        UPDATE Tbl_GIT SET GT10 = REPLACE(REPLACE(REPLACE(REPLACE(GT10,'p.m.','PM'),'p. m.','PM'),'a.m.','AM'),'a. m.','AM')
    END
end
GO
insert into Tbl_GIT values ('12/8/17 4:33:36 PM','01/05/18 06:51:38 p. m.')
insert into Tbl_GIT values ('12/29/17 6:55:53 AM','01/12/18 12:38:24 a. m.')
insert into Tbl_GIT values ('12/29/17 6:55:53 AM','01/01/18 12:38:24 a.m.')
insert into Tbl_GIT values ('12/29/17 6:55:53 AM','01/03/18 12:38:24 p.m.')
select * from Tbl_GIT