我正在尝试按日期过滤一些记录,但是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转换为有效日期时间格式的最佳方法是什么?感谢
答案 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)
你需要使用
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)