2013-03-14 52 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();