如何在SQL Server中使用datetime WHERE子句进行选择?

时间:2011-07-11 12:15:04

标签: sql sql-server

如果我需要选择的时间少于datetime,我会这样做:

  SELECT StackerReplacedEventID, Occured 
  FROM StackerReplacedEvent 
  WHERE Occured<CONVERT(DATETIME, 'Jul 11 2011 03:50PM', 120)

但是我收到了错误。我也尝试过这种方式:

WHERE Occured<'Jul 11 2011 03:50PM'

2 个答案:

答案 0 :(得分:5)

使用ISO日期格式而非区域和/或语言特定格式。

WHERE Occured < '2011-07-11T15:50:00';

现在我们知道语言设置是俄语(经过15次尝试),也许我们可以在这里做一些暴力工作。

WHERE Occured < CONVERT(DATETIME, 
    REPLACE(N'Jul 11 2011 03:50PM', N'Jul', N'июл'), 100)

请注意,N前缀很重要!

所以实际上,因为你将拥有代表所有12个月的数据,所以它可能类似于:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
original_column,N'Jan', N'янв')
,N'Feb',    N'фев')
,N'Mar',    N'мар')
,N'Apr',    N'апр')
,N'May',    N'май')
,N'Jun',    N'июн')
,N'Jul',    N'июл')
,N'Aug',    N'авг')
,N'Sep',    N'сен')
,N'Oct',    N'окт')
,N'Nov',    N'ноя')
,N'Dec',    N'дек')
但是,这太可怕了。请考虑为此数据选择正确的数据类型。

现在您明白为什么要理解您使用的语言,而不是“帮助”翻译错误信息,这很重要吗?

答案 1 :(得分:0)

CONVERT(DATETIME, 'Jul 11 2011 03:50PM')它正在为我工​​作