将SQL函数转换为C#

3

大家好,我有一个 SQL 函数,其中的某些部分用于将 varchar 转换为 datetime:

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如下:

DateTime? dt=null;

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

但在此之后,我对剩下的事情感到困惑。

1
如果我没错的话,SET @PDate = CONVERT(DATETIME, @PValue + '-' + CONVERT(NVARCHAR(4),YEAR(@dt))); 将显示 01-四月-YEAR - Developer
4个回答

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;
}

嗨,我的pvalue是01-APRIL,我需要将其转换为日期时间。 - Learner
@Learner,你不能将它作为DateTime甚至是Date,因为没有年份,这样不可靠。 - LukeHennerley
@Learner 我看到你从 DateTime.Now 获取了你的 Year,所以你的日期不是 01-APRIL 而是 01-APRIL-2013 - LukeHennerley

0
如果你想将一个字符串转换为日期,那么你应该使用 DateTime.Parse 方法。你应该将参数声明为 string,而不是 DateTime?

嗨,对于这个函数,我将传递dateTime值,这并不是问题,因为根据我的说法,我的值将是 01-APRIL。如何在C#中将此datetime转换为SQL查询? - Learner

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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接