月/年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引擎,但如果你从一个月的第一天开始,然后加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。在查询时不要使用字符串,特别是当它来自用户输入时。