2013-03-14 54 views
3

大家好我有一個SQL函數,其中它的某些部分是用來爲varchar轉換爲datetime:轉換SQL函數到C#

IF @dt IS NULL 
    SET @dt = GETDATE(); 

SET @PDate = CONVERT(DATETIME, @PValue + '-' + CONVERT(NVARCHAR(4),YEAR(@dt))); 
IF @PDate > @dt 
    SET @Year = YEAR(@dt) - 1; 
ELSE 
    SET @Year = YEAR(@dt); 

RETURN (SELECT CONVERT(DATETIME, @PValue + '-' + CONVERT(NVARCHAR(4),@Year))); 

有人能幫我嗎?

我的@PValue值是01-APRIL

我只是申報日期時間在我的C#代碼如下:

DateTime? dt=null; 

if(!(dt.HasValue)) 
    dt=DateTime.Now; 

但畢竟這我糊塗了,做剩下的。

+1

如果我沒看錯的'SET @PDate = CONVERT(DATETIME,@PValue + ' - ' + CONVERT(NVARCHAR(4),YEAR(@dt))); '將顯示'01-APRIL-YEAR' – Dotnet 2013-03-14 10:59:26

回答

0

如果你想將字符串轉換爲日期,那麼你應該使用DateTime.Parse方法。您應該聲明該參數爲string,而不是DateTime?

+0

嗨,我將傳遞datetime值,這不是問題在這裏,因爲我說的每個值都是'01-APRIL'我該如何在C#中根據查詢轉換這個日期時間在SQL – Learner 2013-03-14 10:51:38

1

你可以以適當的轉換與上年場做,我看不出01-APRIL是一個有效日期。 01-APRIL什麼時候?一旦你有一個有效的結構化的日期時間,你C#代碼將改爲:

string pValue = @"01/04"; 
DateTime dt = new DateTime(); 
DateTime now = DateTime.Now; 
pValue += string.Format(@"/{0}", now.Year); 
int year = 0; 
if (DateTime.TryParse(pValue, ref dt)) 
{ 
    if (dt > now) 
    year = dt.Year -1 
    else 
    year = dt.Year; 
} 
+0

大家好,我是P值'01-APRIL'這個我需要轉換成datetime – Learner 2013-03-14 10:53:23

+0

@Learner你不能有一個爲'DateTime'甚至沒有一個'Date',不可靠的,因爲反正沒有一年。 – LukeHennerley 2013-03-14 10:54:42

+0

@Learner我看到你從'DateTime.Now'獲得'Year',所以你的日期不是'01-APRIL'它是'01-APRIL-2013' – LukeHennerley 2013-03-14 10:56:31

0

只需撥打DateTime.ParseDateTime.ParseExact,從來沒有自己解析日期,因爲你將在你的實現中的錯誤。這是生活的確定性之一,如死亡和稅收。

如果使用Parse而不是ParseExact一定要指定一個CultureInfo因爲03/06/99將在當前區域設置爲英語(美國)進行不同的分析,而不是英語(英國)。

0

類似下面

DateTime? dt = null; 
     int pYear = 2012; // assuming pYear is getting populated from somewhere 
     int finalYear = 1900; // initilizing some value to it; 
     if (!(dt.HasValue)) 
      dt = DateTime.Now; 
     var year = dt.Value.Year; 
     var pValue = "1-Apr"; 
     if (pYear > year) 
      finalYear = pYear - 1; 
     else 
     { 
      finalYear = year; 
     } 

     return pValue + finalYear.ToString();