我正在将表示日期的varchar字段转换为datetime,并将其与"where - between"
子句一起使用。
我得到:
从字符转换日期和/或时间时转换失败 字符串
我的where
子句是:
select
screen_date
from d8003
where convert(datetime, screen_date, 120) between '6/1/2018' and '12/31/2018'
如何解决此问题?
答案 0 :(得分:1)
尝试使用以下语法(使用YYYYMMDD日期格式,而不是MM / DD / YYYY):
public void search(String searchQuery, String searchType){
page.enterSearchBarText(searchQuery);
if(searchType.equalsIgnoreCase("enter"){
page.pressEnter();
}else {
page.clickSearchButton();
}
//wait For SearchResult to present
}
如果仍然出现相同的错误,请检查您是否使用了正确的日期格式代码:
答案 1 :(得分:0)
2005年前的错误处理能力非常有限。 对于SQL 2005+,应该可以使用
declare
@date_value varchar(50)
,@tmp datetime;
declare x cursor local fast_forward
for
select screen_date from d8003
open x;
fetch next from x into @date_value;
while @@fetch_status = 0
begin
begin try
set @tmp = convert(datetime,@date_value, 120)
end try
begin catch
select 'This one is bad! Please fix me!! (' + rtrim(@date_value) + ')' bad_values;
end catch
fetch next from x into @date_value;
end
close x;
deallocate x;
GO
这将在SQL 2012+中返回您的错误数据 try_convert,将对不可转换的字符串返回null。
select
try_convert(datetime, screen_date, 120) mytryconvert
,screen_date
from d8003
where try_convert(datetime, screen_date, 120) is null
您可以手动更正数据或通过字符串操作内联。
答案 2 :(得分:0)
如果不确定是否可以实际转换该值,请使用TRY_CAST。
但是请注意,您收到此错误的事实可能表明您的列中的某些记录存在问题。仅在只关心获取varchar列可以实际转换为日期时间的记录时才使用TRY_CAST。
SELECT
[screen_date]
FROM
[d8003]
WHERE
TRY_CAST([screen_date] AS DATETIME) BETWEEN '6/1/2018' AND '12/31/2018'
答案 3 :(得分:0)
感谢您提供的所有建议和帮助。很高兴告诉您,我找到了解决方案。这是我的代码:
其中try_cast(screen_date为smalldatetime)介于“ 2018-06-01”和“ 2018-12-31”之间
这是一个有多年经验的同事的建议。 (我刚刚开始用SQL编写代码...。)
这是先前一个人的建议,我不确定为什么当时不起作用。
Deguza