我有一列名爲next_due_date
的數據類型varchar
,在此列中有一些不存在的日期,如31/06/2012
或30/02/2013
已保存。因此,當我將其轉換爲date
數據類型時,我收到一條錯誤消息。如何在SQL Server 2008中將數據類型爲varchar的'31/06/2013'或'30/02/2013'轉換爲日期
將varchar數據類型轉換爲日期時間數據類型導致超出範圍的值。
我有一列名爲next_due_date
的數據類型varchar
,在此列中有一些不存在的日期,如31/06/2012
或30/02/2013
已保存。因此,當我將其轉換爲date
數據類型時,我收到一條錯誤消息。如何在SQL Server 2008中將數據類型爲varchar的'31/06/2013'或'30/02/2013'轉換爲日期
將varchar數據類型轉換爲日期時間數據類型導致超出範圍的值。
您可以使用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
這沒有幫助。這個問題被標記爲「sql-server-2008」。無論如何,標題說*我如何轉換*不*如何找出日期是否有效*。這個問題是荒謬的。 – 2014-12-02 07:47:38
@ ta.speot.is:好的,我已更新爲包含舊版本的程序解決方案。 – 2014-12-02 07:54:19
@Neha:需要更多幫助? – 2014-12-02 09:43:58
如果日期將是有效的(不是像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
+一個答案*如何轉換日期*儘可能最好。 – 2014-12-02 07:53:22
@ ta.speot.is:這沒有幫助。問題在於確定格式是否是有效日期。 – 2014-12-02 07:42:55
'31/06/2013' - 6月31日?????認真?????這將***不***與***任何***日期格式化字符串 - 它只是一個**不可能**日期解析! 2月30日同樣如此...... – 2014-12-02 07:50:24