在SQL Server表中查找与今天相关的日期时间项时出现问题

在SQL Server表中查找与今天相关的日期时间项时出现问题,sql,sql-server,sql-date-functions,sqldatetime,sql-convert,Sql,Sql Server,Sql Date Functions,Sqldatetime,Sql Convert,我有一个带有varchar列的表,其中有不同的值。此列中的某些值实际上是datetime戳,但是以varchar数据类型写入的。 我希望找到包含日期时间和与今天相关的条目。 我的桌子是这样的: ID | column_x --------------------- 12 | apple 13 | 25.03.2018 14:13:58 14 | 05.10.2020 10:43:17 15 | 3620 ID | column_x

我有一个带有varchar列的表,其中有不同的值。此列中的某些值实际上是datetime戳,但是以varchar数据类型写入的。 我希望找到包含日期时间和与今天相关的条目。 我的桌子是这样的:

  ID  |  column_x
---------------------
  12  |  apple
  13  |  25.03.2018 14:13:58
  14  |  05.10.2020 10:43:17
  15  |  3620
  ID  |       column_x          |  the_date
-------------------------------------------------
  13  |  25.03.2018 14:13:58    | 2018-03-25
  14  |  05.10.2020 10:43:17    | 2020-10-05
  15  |  3620                   | 3620-01-01
以下查询工作正常

select [ID] ,[column_x],
CAST(CONVERT(DATETIME, [column_x] , 104) AS DATE) the_date
from [my_DB].[dbo].[my_table]
where (ISDATE([column_x])=1)
结果如下:

  ID  |  column_x
---------------------
  12  |  apple
  13  |  25.03.2018 14:13:58
  14  |  05.10.2020 10:43:17
  15  |  3620
  ID  |       column_x          |  the_date
-------------------------------------------------
  13  |  25.03.2018 14:13:58    | 2018-03-25
  14  |  05.10.2020 10:43:17    | 2020-10-05
  15  |  3620                   | 3620-01-01
现在我想展开afformented查询以查找属于今天的条目(2020.10.05)

以下查询给出了错误消息:

select * from (
select [ID] ,[column_x],
CAST(CONVERT(DATETIME, [column_x] , 104) AS DATE) the_date
from [my_DB].[dbo].[my_table]
where (ISDATE([column_x])=1) 
) s
where
(select CAST(CONVERT(DATETIME, s.[column_x] , 104) AS DATE))=
(SELECT CAST(GETDATE() AS DATE))
错误消息是:

Conversion failed when converting date and/or time from character string.
我无法理解为什么我会出现这个错误,因为我已经根据SQL本身只选择了datetime条目

更奇怪的是,以下查询工作正常并打印输出:

if
(select CAST(CONVERT(DATETIME, '05.10.2020 19:46:19' , 104) AS DATE))=
(SELECT CAST(GETDATE() AS DATE))
print 'condition is fulfileld'
即使用有问题的数字(3620)替换日期也不会导致错误。只是在那种情况下不符合条件


我不明白为什么会出现这个错误。

您可以使用
try\u convert()
。但为什么不将当前日期转换为相同的格式:

select [ID] ,[column_x]
from [my_DB].[dbo].[my_table]
where left(column_x, 10) = convert(varchar(10), getdate(), 104)
要以另一种方式进行比较:

where try_convert(date, column_x, 104) = convert(date, getdate())

非常感谢你。第一部分解决了我的问题,但第二部分不起作用。它在单词“date”下面加下划线作为语法错误,并将鼠标悬停在上面,表示“无效的列名'date'”。运行它将导致此错误
try\u convert不是可识别的内置函数名。
。当鼠标悬停在“try_convert”上时,它提供了有关该内置函数的正确信息。@Iraj和您的SQL server(不是SSMS)版本是<代码>try_convert()包含在SQL2012中。@Arvo感谢您的评论。我的SSMS正在更新,但使用的是
SELECT@@version
我的SQL Server版本似乎是
Microsoft SQL Server 2008 R2(RTM)