2015-06-15 41 views
2

我有一個函數可以將字符串轉換爲datetime (101)格式。 但是當我轉換這個值時,它給了我一個錯誤。從sql server中的字符串轉換日期和/或時間時轉換失敗

2016-03-01 00:00:00.0000000 

和錯誤是

Msg 241, Level 16, State 1, Line 2 
Conversion failed when converting date and/or time from character string. 

我的功能就是..

ALTER FUNCTION [dbo].[ConvertToDate] 
(
    @Value nVarchar(MAX) 
) 
RETURNS DATETIME 
AS 
BEGIN 
    IF (@Value <> NULL OR @Value <> '') 
     BEGIN 
      DECLARE @dt DATETIME 
      SET @dt = CONVERT(DATETIME,@Value,101) 
      --SET @dt = CAST(@Value AS DATETIME(101)) 
      RETURN @dt 
     END 

     RETURN NULL 

END 

問題是什麼?

+3

**附註:**'@Value <> NULL'。如果使用<>與NULL進行比較,結果爲NULL,並且不是真或假。正確的方法是'@Value IS NOT NULL' – ughai

+0

轉換爲YYYY-MM-DD hh:mm:ss: – mohan111

+0

使用datetime2它可以更多秒鐘 –

回答

1

在毫秒部分太多的零數據。這工作得很好

DECLARE @Value nVarchar(MAX)='2016-03-01 00:00:00.000' 
SELECT CONVERT(DATETIME,@Value,101) 

您可以嘗試使用LEFT這樣

DECLARE @Value nVarchar(MAX)='2016-03-01 00:00:00.000000' 
SELECT CONVERT(DATETIME,LEFT(@Value,23),101) 
3

這是問題你的數據。它不是轉換。 您的數據應該是這樣的

'2016-03-01 00:00:00.0000000' 

但你可以改變這樣的

'2016-03-01 00:00:00.000' 
+0

我該如何改變這一點..是有沒有辦法將它們轉換成 – tarzanbappa

+0

沒有必要.. –

+0

@tarzanbappa如果你想轉換,那麼你可以使用下面的子字符串DECLARE(at)dt VARCHAR(50)='2016-03-01 00:00:00.0000000' select CAST(SUBSTRING((at)dt,1,16)AS datetime),但是沒有必要,你可以直接使用datetime2這個更好的選項 –

1
DECLARE @dt VARCHAR(50) ='2016-03-01 00:00:00.000000' 

select CAST (@dt AS DATETIME2) 
相關問題