在SQL Server表中查找与今天相关的日期时间项时出现问题
我有一个带有varchar列的表,其中有不同的值。此列中的某些值实际上是datetime戳,但是以varchar数据类型写入的。 我希望找到包含日期时间和与今天相关的条目。 我的桌子是这样的:在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
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)