将varchar转换为datetime字段

时间:2015-08-12 09:52:55

标签: sql sql-server datetime

我正在尝试按日期过滤一些记录,但是datetime字段似乎存储为varchar,我正在努力转换它。以下是数据样本:

ID      DateField
0002    14/04/1989 01:30
0003    16/04/1989 09:45
0004    16/04/1989 06:00
0005    19/04/1989 01:07
0006    21/04/1989 16:03

当我使用

cast(Datefield as datetime)

我收到以下错误消息:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

编辑 - 这实际上显示的是日期时间格式的结果,但是出现错误信息,为什么会这样?

将datefield转换为有效日期时间格式的最佳方法是什么?感谢

4 个答案:

答案 0 :(得分:2)

使用带样式的CONVERT

CONVERT(DATETIME,Datefield ,103)

要查找错误数据,请查看返回的内容

set dateformat dmy
select Datefield from table where isdate(where)=0

您应始终使用正确的DATETIME数据类型来存储日期时间值

答案 1 :(得分:2)

试试这个。您需要添加样式部分以标识格式

SELECT CONVERT(DATETIME, dates, 103)
FROM   (VALUES ('14/04/1989 01:30'),
               ('16/04/1989 09:45'),
               ('16/04/1989 06:00'),
               ('19/04/1989 01:07'),
               ('21/04/1989 16:03')) cs (dates) 

答案 2 :(得分:1)

请参阅CAST and CONVERT

你需要使用

select CONVERT(datetime,your_Datefield ,103)

因为您的your_Datefield持有dd/mm/yy格式的日期时间值。

  

点击链接,您将获得解释。

答案 3 :(得分:1)

您可以获取错误,因为默认情况下日期时间格式为mm / dd / yyyy。因此,如果您的值具有此格式,则可以轻松转换而不会出错。

为此,您必须使用将字符串转换为正确的日期时间格式的格式进行转换。对于这个演员不会工作,但转换工作。以下是link了解详情。

由于格式为dd / mm / yyyy,因此需要使用103格式。只需检查一下即可了解。

Select convert( datetime, getdate(), 103)