更改SQL Server日期字符串或其他格式

时间:2018-05-18 13:37:19

标签: sql-server tsql

请原谅我的dunglish,我是荷兰人。

我有一个看起来像这样的表:

CREATE TABLE [dbo].[WSLogons]
(
    [Date] [nchar](15) NULL,
    [Time] [nchar](15) NULL,
    [Username] [nchar](15) NULL,
    [Domain] [nchar](15) NULL,
    [Computer] [nchar](15) NULL,
    [HostComputerName] [nchar](15) NULL
) ON [PRIMARY]

没有主键。

我在这个表格中填写了一些用户数据,我犯了一个很大的错误,但我面临的事实是我的日期和时间列填写错误。

这已经解决但在我的数据库中我有不同的日期和时间格式。 我正在查询转换日期和时间函数。

这不起作用,因为在某些行中,我有这样的日期和时间值:

5/18/2018       9:00 AM         
5/18/2018       8:28 AM   

并以某种正确的方式像这样

18-05-2018      14:52  

正如我所说,我通过订单和转换来查询信息

order by CONVERT(date, Date, 105) desc 

如果结果是带有美国符号的日期和时间,我会收到格式错误。

现在我正如你所见,不是一个SQL大师。我已经更正了填充表格的脚本,但现在我想将错误的日期转换为正确的格式,以便保存数据。

我希望通过此声明在查询中获得一个不错的结果。

SELECT 
    CONVERT(date, [Date] ,101) as datum
    ,[Time]
    ,[Username]
    ,[Domain]
    ,[Computer]
    ,[HostComputerName]
FROM 
    [AuditLogons].[dbo].[WSLogons] 
WHERE
    date LIKE '%/%/%' 
    AND Time LIKE '%:% AM%' OR Time LIKE '%:% PM%'

现在datum列显示为

2018-05-18  11:59 AM  
2018-05-18  1:25 PM 

如何在格式化日期时更新这些行,例如18-5-2018

如果我尝试转换为

CONVERT(date, [Date], 105) 

我也遇到了错误。

希望你能理解我的问题,希望得到一些帮助

非常感谢。 罗杰

2 个答案:

答案 0 :(得分:0)

这似乎有效,但潜在的问题是数据库设计的第一条规则是使用适当的数据类型。如果您可以更改这些列,请执行此操作;如果你不能,请确保你正在验证你的意见。

DECLARE @WSLogons TABLE(
    [Date] [nchar](15) NULL,
    [Time] [nchar](15) NULL
)

INSERT INTO @WSLogons ([Date],[Time]) SELECT '5/18/2018','9:00 AM'
INSERT INTO @WSLogons ([Date],[Time]) SELECT '5/18/2018','09:00'

SELECT *
    ,CONVERT(datetime2, [Date] + ' ' + [Time]) as datum
FROM @WSLogons

答案 1 :(得分:0)

首先在表格中添加实际日期列:

alter table dbo.WSLogons add realDate datetime;

然后用适当的数据更新它,即:

update dbo.WSLogons
set realDate = CONVERT(datetime, Date, 101)
where Date like '[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]'

用于 dd / mm / yyyy 样式的日期格式 对于其他格式,请参阅here