如何查找日期格式dd / mm / yyyy的整月数据?

时间:2012-08-28 11:23:38

标签: sql-server-2005

我有一个日期格式为“yyyyymmdd”和数据类型varchar(8)的数据库。在这种情况下,当我需要查找整月的数据时,我曾经编写过如下代码:

  select * from table1
  where Date Between (convert(varchar(6),getdate(),112)+'01')
  AND (convert(varchar(6),getdate(),112)+'31'))

现在我只有一个日期格式为“dd / mm / yyyy”的新表和日期类型varchar(10),我想从表中提取整月的数据而不指定确切的日期。我希望开始日期为当前月份的第一天,月份和结束日期为当月的最后一天。

但我现在不知道如何做同样的日期格式现在'dd / mm / yyyy'。

2 个答案:

答案 0 :(得分:2)

首先,您应该将日期存储为date的数据类型,而不是varchar

您可以使用MONTH()

SELECT *
FROM yourTable
WHERE MONTH(convert(datetime, dt, 103)) = MONTH(getdate()) -- or month you want

DATEPART()

SELECT *
FROM yourTable
WHERE DatePart(month, convert(datetime, dt, 103)) = DatePart(month, getdate())

请参阅SQL Fiddle with Demo

这两个,得到MONTH() - 8,9,10的值 - 然后将其与您想要的月份进行比较。

答案 1 :(得分:2)

<强> Demo 2

<强> DEMO 1

样品
 select idcol,namecol,datecol, from table where datepart(mm,datecol)='9'

修改

select * from dummy where datepart(mm,dob)= datepart(mm,getdate()) http://sqlfiddle.com/#!3/50efd/7

他们是同一个月和不同年份的可能性所以你也需要照顾年份,例如添加and datepart(yyyy,dob)=datepart(yyyy,getdate())