大家好我有一个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;
但在此之后,我很困惑地做剩下的事。
答案 0 :(得分: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;
}
答案 1 :(得分:0)
如果要将字符串转换为日期,则应使用DateTime.Parse
方法。您应该将参数声明为string
,而不是DateTime?
。
答案 2 :(得分:0)
只需致电DateTime.Parse
或DateTime.ParseExact
,不要自己解析日期,因为您的实施中会有错误。这是生命的确定性之一,如死亡和税收。
如果您使用Parse
而非ParseExact
,请务必指定CultureInfo
,因为如果当前区域设置为英语(美国),则03/06/99
将以不同方式进行解析英语(英国)。
答案 3 :(得分: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();