2014-12-02 64 views
-1

我有一列名为next_due_date的数据类型varchar,在此列中有一些不存在的日期,如31/06/201230/02/2013已保存。因此,当我将其转换为date数据类型时,我收到一条错误消息。如何在SQL Server 2008中将数据类型为varchar的'31/06/2013'或'30/02/2013'转换为日期

将varchar数据类型转换为日期时间数据类型导致超出范围的值。

+1

@ ta.speot.is:这没有帮助。问题在于确定格式是否是有效日期。 – 2014-12-02 07:42:55

+1

'31/06/2013' - 6月31日?????认真?????这将***不***与***任何***日期格式化字符串 - 它只是一个**不可能**日期解析! 2月30日同样如此...... – 2014-12-02 07:50:24

回答

2

您可以使用try_parse(仅在更高版本的SQL上,从2012年开始才可用)。它检查日期是否有效。如果是,则返回date,否则返回null

我觉得en-GB是你需要的文化:

select try_parse('30/06/2012' as date using 'en-GB') -- returns a valid date 

select try_parse('31/06/2012' as date using 'en-GB') -- returns null 

如果你需要这个较低的平台,我会建议由专人使用程序来解析它。事情是这样的:

BEGIN TRY 
    select CONVERT(date,'31/06/2012',103) 
END TRY 
BEGIN CATCH 
    select null 
END CATCH 
+0

这没有帮助。这个问题被标记为“sql-server-2008”。无论如何,标题说*我如何转换*不*如何找出日期是否有效*。这个问题是荒谬的。 – 2014-12-02 07:47:38

+0

@ ta.speot.is:好的,我已更新为包含旧版本的程序解决方案。 – 2014-12-02 07:54:19

+0

@Neha:需要更多帮助? – 2014-12-02 09:43:58

2

如果日期将是有效的(不是像6月31日的或二月的30日 - 这些日子根本不存在!),那么你可以很容易地使用CONVERT函数将它们转换为DATE

DECLARE @DateTable TABLE (DateColumn VARCHAR(20)) 

-- **VALID** dates - 30th of June, 28th of Feb 
INSERT INTO @DateTable(DateColumn) VALUES ('30/06/2012'), ('28/02/2013') 

-- easily converted to DATE type using style #104 
SELECT DateColumn, CONVERT(DATE, DateColumn, 104) 
FROM @DateTable 
+0

+一个答案*如何转换日期*尽可能最好。 – 2014-12-02 07:53:22

相关问题