我有一个日期格式为“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'。
答案 0 :(得分:2)
首先,您应该将日期存储为date
的数据类型,而不是varchar
您可以使用MONTH()
SELECT *
FROM yourTable
WHERE MONTH(convert(datetime, dt, 103)) = MONTH(getdate()) -- or month you want
SELECT *
FROM yourTable
WHERE DatePart(month, convert(datetime, dt, 103)) = DatePart(month, getdate())
这两个,得到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())