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

Art*_*man 1 sql sql-server

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

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

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

WHERE Occured<'Jul 11 2011 03:50PM'
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 5

使用ISO日期格式而不是区域和/或语言特定的格式.

WHERE Occured < '2011-07-11T15:50:00';
Run Code Online (Sandbox Code Playgroud)

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

WHERE Occured < CONVERT(DATETIME, 
    REPLACE(N'Jul 11 2011 03:50PM', N'Jul', N'???'), 100)
Run Code Online (Sandbox Code Playgroud)

请注意,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'???')
Run Code Online (Sandbox Code Playgroud)

但这太可怕了.请考虑为此数据选择正确的数据类型.

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

  • 你是什​​么意思,它以这种方式存储为SQL Server中的字符串?为什么?无论如何,不​​应该是一个问题,除非您的区域设置/整理/语言不是默认设置.您是否收到英语以外语言的错误消息? (2认同)