0

我有一个日期格式为“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”。

4

2 回答 2

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

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

于 2012-08-28T11:27:01.180 回答
2

演示 2

演示 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())

于 2012-08-28T11:31:57.247 回答