如何在SQL Where子句中格式化日期?

时间:2011-05-05 13:33:30

标签: tsql stored-procedures

我有一个针对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字段。

3 个答案:

答案 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 ...