请原谅我的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)
我也遇到了错误。
希望你能理解我的问题,希望得到一些帮助
非常感谢。 罗杰
答案 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