月/年SQL纠正格式

本文关键字:格式 SQL | 更新日期: 2023-09-27 18:03:27

我有一个文本字段,用户使用修改后的jquery日期拾取器输入日期。文本字段具有月份和年份,例如'July 2011'

我需要运行一个查询来搜索2011年7月1日到2011年7月31日之间的结果。我在数据库中的日期是一个smalldatetime,所以我需要我的查询看起来像这样:

select * from members where signupdate between 'july 1 2011' and 'july 31 2011'

如何将用户输入的2011年7月日期转换为"2011年7月1日"answers"2011年7月31日"?

编辑

我只从InvalidCount得到一个0值,但我知道我有一个记录在那里作为一个测试。为什么它没有被计算在内?

我的PROC:

SELECT
(SELECT COUNT(*) FROM dbo.Members m WHERE m.memberID = @pMemberID AND m.SignUpDate BETWEEN @pDate AND DATEADD(MONTH, 1, @pDate)-1) AS 'SignUpDate',
COALESCE(SUM(m.ValidCount), 0) AS ValidCount,
COALESCE(SUM(m.InvalidCount), 0) AS InvalidCount
FROM
dbo.Members m
INNER JOIN 
dbo.MemberStats ms ON m.MemberID = ms.MemberID  
WHERE 
m.SignUpdate BETWEEN @pDate AND DATEADD(MONTH, 1, @pDate)-1

月/年SQL纠正格式

确切的语法取决于SQL引擎,但如果你从一个月的第一天开始,然后加1个月,最后减去1天;你得到了月底。

(我假设MS SQL Server匹配你的c#标签)

SELECT
  *
FROM
  members
WHERE
  signupdate BETWEEN @param AND DATEADD(MONTH, 1, @param) - 1

如果不需要,可以使用DatePart.

未经测试的例子:

where DATEPART(yyyy, SignupDate) = 2011 and DATEPART(m, SignupDate) = 7

将varchar转换为您想要的格式,然后进行比较检查格式列表。希望这能帮到你。

转换日期

首先,必须在服务器上将字符串表示转换为有效的DateTime结构对象。可以用var date = DateTime.ParseExact("july 1 2011", "MMMM dd yyyy", CultureInfo.CurrentUICulture)DateTime.TryParse。然后将其作为参数传递给SqlCommand。在查询时不要使用字符串,特别是当它来自用户输入时。