Reputation: 227
I am facing issue while querying for some data from SQL. The column datatype is varchar which has datetime stamp as part of its name, like DUMMY2_20140713.pdf.
Want to search for files between week date duration.so trying to convert part of file name to date as below:
select file_name,file_name
from t_pdf_weekly_violation
where CONVERT(datetime, SUBSTRING(file_name, CHARINDEX('_', file_name) + 1, 8), 112) between 20150506 and 20150513;
But it is throwing exception..Please find stack trace below:
com.microsoft.sqlserver.jdbc.SQLServerException: Arithmetic overflow error converting expression to data type datetime. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196) at com.microsoft.sqlserver.jdbc.SQLServerResultSet$FetchBuffer.nextRow(SQLServerResultSet.java:4700) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.fetchBufferNext(SQLServerResultSet.java:1683) at com.microsoft.sqlserver.jdbc.SQLServerResultSet.next(SQLServerResultSet.java:956) at databaseconnection.ConnectionURL.main(ConnectionURL.java:36)
Have any one idea on this?
Thanks in advance
Upvotes: 0
Views: 2001
Reputation: 227
It is working when I changed return type datetime to char, like
SELECT file_name,file_name
FROM t_pdf_weekly_violation
WHERE CONVERT(char(8),SUBSTRING(file_name, CHARINDEX('_', file_name) + 1, 8),112)
between CONVERT(char(8),'20150506',112) and CONVERT(char(8),'20150510',112);
Upvotes: 0
Reputation: 8497
There is no need to convert substring to Datetime, just remove CONVERT(datetime
SELECT file_name,file_name
FROM t_pdf_weekly_violation
WHERE SUBSTRING(file_name, CHARINDEX('_', file_name) + 1, 8) between 20150506 and 20150513;
Alternate Solution
If you want to use CONVERT(datetime
, then you have to convert your all dates
SELECT file_name,file_name
FROM t_pdf_weekly_violation
WHERE CONVERT(datetime,SUBSTRING(file_name, CHARINDEX('_', file_name) + 1, 8),112)
between CONVERT(datetime,'20150506',112) and CONVERT(datetime,'20150510',112);
Upvotes: 1