在 SQL 服务器 table 中查找与今天相关的日期时间条目时出现问题
Problem with finding datetime entries which are related to today in a SQL Server table
我有一个 table,其中有一个包含不同值的 varchar 列。此列中的某些值实际上是日期时间戳,但以 varchar 数据类型写入。
我希望找到包含日期时间且与今天相关的条目。
所以,我的 table 是这样的:
ID | column_x
---------------------
12 | apple
13 | 25.03.2018 14:13:58
14 | 05.10.2020 10:43:17
15 | 3620
以下查询有效
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 | 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
现在我想扩展上述查询以查找属于今天 (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 本身只选择了日期时间条目。
更奇怪的是,以下查询工作正常并打印输出:
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_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())
我有一个 table,其中有一个包含不同值的 varchar 列。此列中的某些值实际上是日期时间戳,但以 varchar 数据类型写入。 我希望找到包含日期时间且与今天相关的条目。 所以,我的 table 是这样的:
ID | column_x
---------------------
12 | apple
13 | 25.03.2018 14:13:58
14 | 05.10.2020 10:43:17
15 | 3620
以下查询有效
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 | 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
现在我想扩展上述查询以查找属于今天 (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 本身只选择了日期时间条目。
更奇怪的是,以下查询工作正常并打印输出:
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_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())