Noo*_*ora -1 sql sql-server datetime sql-server-2008
我有一个表格,其中包含存储日期和时间的列.我需要编写一个查询来只获取该列的日期,
SELECT CAST(CONVERT(VARCHAR, LoginTime, 101) AS datetime) FROM AuditTrail
Run Code Online (Sandbox Code Playgroud)
但是,当我运行查询时,我收到此错误:
将varchar数据类型转换为日期时间数据类型会导致超出范围的值.
列中的数据是datetime ex:2012-06-18 12:08:04.000所以我只需要提取日期并删除[Logintime]列是数据时间格式的时间注释
你能帮我吗?
ISDATE()
在SQL Server中尝试函数.如果为1,请选择有效日期.如果0选择无效日期.
SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)
FROM AuditTrail
WHERE ISDATE(LoginTime) = 1
Run Code Online (Sandbox Code Playgroud)
编辑:
根据您的更新,我需要提取日期并删除时间,然后您可以简单地使用内部CONVERT
SELECT CONVERT(VARCHAR, LoginTime, 101) FROM AuditTrail
Run Code Online (Sandbox Code Playgroud)
要么
SELECT LEFT(LoginTime,10) FROM AuditTrail
Run Code Online (Sandbox Code Playgroud)
编辑2:
错误的主要原因将在WHERE子句中的日期.ie,
SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)
FROM AuditTrail
where CAST(CONVERT(VARCHAR, LoginTime, 101) AS DATE) <=
CAST('06/18/2012' AS DATE)
Run Code Online (Sandbox Code Playgroud)
将与众不同
SELECT cast(CONVERT(varchar, LoginTime, 101) as datetime)
FROM AuditTrail
where CAST(CONVERT(VARCHAR, LoginTime, 101) AS DATE) <=
CAST('18/06/2012' AS DATE)
Run Code Online (Sandbox Code Playgroud)
结论
在编辑2中,第一个查询尝试以mm/dd/yyyy
格式过滤,而第二个查询尝试以dd/mm/yyyy
格式过滤.它们中的任何一个都会失败并抛出错误
将varchar数据类型转换为日期时间数据类型会导致超出范围的值.
因此,请确保使用mm/dd/yyyy
或以dd/mm/yyyy
格式过滤日期,无论哪种方式都适用于您的数据库.
归档时间: |
|
查看次数: |
125129 次 |
最近记录: |