2014-12-02 61 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

相關問題