有没有一种安全的方法来转换SQL日期时间?

时间:2011-07-14 04:39:34

标签: sql sql-server

非常简单的问题,我无法找到答案:

是否有一种简单而安全的方法可以在SQL Server中将varchar强制转换为datetime

†即使用默认日期时间值

正常处理非日期时间字符串

4 个答案:

答案 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) 

manual

中的更多详细信息

答案 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]