【发布时间】:2015-05-13 17:35:23
【问题描述】:
我在从 SQL 查询某些数据时遇到问题。列数据类型是 varchar,其名称中包含日期时间戳,例如 DUMMY2_20140713.pdf。
想要在星期日期持续时间之间搜索文件。因此尝试将部分文件名转换为日期,如下所示:
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;
但它正在抛出异常..请在下面找到堆栈跟踪:
com.microsoft.sqlserver.jdbc.SQLServerException:算术溢出 将表达式转换为数据类型日期时间时出错。在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196) 在 com.microsoft.sqlserver.jdbc.SQLServerResultSet$FetchBuffer.nextRow(SQLServerResultSet.java:4700) 在 com.microsoft.sqlserver.jdbc.SQLServerResultSet.fetchBufferNext(SQLServerResultSet.java:1683) 在 com.microsoft.sqlserver.jdbc.SQLServerResultSet.next(SQLServerResultSet.java:956) 在 databaseconnection.ConnectionURL.main(ConnectionURL.java:36)
对此有任何想法吗?
提前致谢
【问题讨论】:
-
请注意,为什么在查询的选择列表中出现两次
file_name -
CONVERT(datetime替换为CONVERT(int -
Piyush : 取文件名的子字符串,所以使用了两次 file_name。
-
Lashane :我尝试用 int 替换 datetime,但仍然显示异常
-
@user3863488:- 我不是在谈论子字符串,我的意思是在您的查询中指出此代码
select file_name,file_name