非常简单的问题,我无法找到答案:
是否有一种简单而安全的方法可以在SQL Server中将varchar
强制转换为datetime
?
†即使用默认日期时间值
正常处理非日期时间字符串答案 0 :(得分:5)
您可以使用isdate功能过滤行。此查询返回三行,没有任何转换错误:
with v as (
select '20110714' value union all
select '2011-07-15' union all
select '3/22/2011' union all
select 'foo'
)
select cast(value as datetime)
from v
where isdate(value) = 1
修改强>
如果你想要一个默认的vaue(比如当前的日期/时间),你可以这样做:
select case when isdate(value) = 1 then cast(value as datetime) else getdate() end
答案 1 :(得分:1)
从SQL Server Denali,您可以使用TRY_CONVERT
。案例表达式是以前版本中唯一的safe way。
答案 2 :(得分:0)
你可以尝试
select cast ('28/08/2006 11:23:25' as datetime)
SELECT * FROM tab_val WHERE (CASE ISDATE(val) WHEN 1 THEN CAST(val As DateTime) ELSE NULL END)
中的更多详细信息
答案 3 :(得分:0)
我们可以检查列是否具有有效的日期时间,如果没有则返回空值而不生成任何错误。
SELECT CASE ISDATE([YourDate]) WHEN 0
THEN CAST([YourDate] AS DATETIME)
ELSE CAST(NULL AS DATETIME) END AS [Your Date]
FROM [dbo].[yourtable]