我有一个针对SQL数据库的.NET 2010应用程序。在应用程序端,用户可以搜索开始日期和结束日期。这些机器人只有月份+年份。然后我将它们格式化为完整日期。因此,当他们进入存储过程时,他们将看起来像这样......
开始日期:2011年1月1日 截止日期:2011年5月31日
但是db中的日期分为3个int字段,Month,Day&年份,...哪一天可能填写或未填写(如果没有,则为0)。在运行此查询时,始终默认为1是可以的。因此,如果db中的值是Month = 3,Day = 0 Year = 2011,我希望sql语句呈现为
'1/1/2011'和'5/31/2011'之间格式化的地方
我无法弄清楚如何在where子句中格式化sql字段。
答案 0 :(得分:0)
您可以使用WHERE子句EG中的datadd函数构建日期。
SELECT ...
WHERE DATEADD(Day, field_days-1, DATEADD(Month, field_months-1, DATEADD(Year, field_years-1900, 0))) BETWEEN '1/1/2011' AND '5/31/2011'
只需将field_days,field_months,field_years替换为表中的int字段,包括天,月和年。这将返回日期范围内的所有记录。
这是你需要的吗?
答案 1 :(得分:0)
你有没有试过像
这样的东西WHERE CONVERT(DATETIME,
CONVERT(VARCHAR(4), [c_year]) + '/'
+ CONVERT(VARCHAR(2), [c_month]) + '/'
+ CONVERT(VARCHAR(2), [c_day]))
BETWEEN '2011/1/1' AND '2011/5/31'
希望有所帮助
答案 2 :(得分:0)
WHERE CAST(Year AS varchar) + RIGHT(100 + Month, 2) +
RIGHT(100 + COALESCE(NULLIF(Day, 0), 1), 2) BETWEEN ...