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

Sql server 2005 如何查找日期格式dd/mm/yyyy的整月数据?,sql-server-2005,Sql Server 2005,我有一个日期格式为YYYY MMDD'且数据类型为varchar8的数据库。在这种情况下,当我需要查找整个月的数据时,我通常会编写如下代码: select * from table1 where Date Between (convert(varchar(6),getdate(),112)+'01') AND (convert(varchar(6),getdate(),112)+'31')) 现在我有了一个日期格式为dd/mm/yyyy、日期类型为varchar10的新表,我想从表

我有一个日期格式为YYYY MMDD'且数据类型为varchar8的数据库。在这种情况下,当我需要查找整个月的数据时,我通常会编写如下代码:

  select * from table1
  where Date Between (convert(varchar(6),getdate(),112)+'01')
  AND (convert(varchar(6),getdate(),112)+'31'))
现在我有了一个日期格式为dd/mm/yyyy、日期类型为varchar10的新表,我想从表中提取整个月份的数据,而不指定确切的日期。我希望开始日期为当前月份的第一天,结束日期为当前月份的最后一天


但是我现在不知道如何做,因为日期格式现在是'dd/mm/yyyy'

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

你可以用


这两种方法都会得到月份的值——8、9、10,然后将其与您想要的月份进行比较

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

你可以用

这两种方法都会得到月份的值——8、9、10,然后将其与您想要的月份进行比较

样品 从datepartmm,datecol='9'所在的表中选择idcol,namecol,datecol

编辑:

选择*from dummy,其中datepartmm,dob=datepartmm,getdate

它们可能是同一个月和不同的年份,所以你也需要注意年份,比如添加和datepartyyyy,dob=datepartyyyy,getdate

样品 从datepartmm,datecol='9'所在的表中选择idcol,namecol,datecol

编辑:

选择*from dummy,其中datepartmm,dob=datepartmm,getdate


它们可能是同一个月和不同的年份,因此您还需要通过添加和datepartyyyy,dob=datepartyyyy,getdate

@satinder来处理年份。在这种情况下,我需要手动指定每个月。我有一个更新存储过程,我希望它在执行整个月时自动更新,而不指定月份名称。@satinder..在这种情况下…我需要每月手动指定月份。我有一个更新存储过程,我希望它在执行时自动更新整个月,而不指定月名。谢谢blueffeet。。。。它工作得很完美。但是我想知道它是否也可以像我在原始问题中为格式“yyyymmdd”编写的那样编写。@user1449596您仍然可以将它用于格式为yyyymmdd的日期。请注意,将month和datepart应用于列将意味着不能使用索引,而d/m/y上的索引将非常有用很有用。但是如果数据类型得到修复,那么最好说>={month}和<{month+1}。谢谢bluefeet..我需要为明年更改代码吗@Aaron Bertrand..我将尽快尝试更改数据类型。谢谢。@user1449596 getdate将始终具有今天的日期,因此不必更改。谢谢blueffeet。。。。它工作得很完美。但是我想知道它是否也可以像我在原始问题中为格式“yyyymmdd”编写的那样编写。@user1449596您仍然可以将它用于格式为yyyymmdd的日期。请注意,将month和datepart应用于列将意味着不能使用索引,而d/m/y上的索引将非常有用很有用。但是如果数据类型得到修复,那么最好说>={month}和<{month+1}。谢谢bluefeet..我需要为明年更改代码吗@Aaron Bertrand..我将尽快尝试更改数据类型。谢谢。@user1449596 getdate将始终具有今天的日期,因此不必更改。为什么您的日期存储为varchar?我建议你把它修好。为什么你的日期存储为varchar?我建议你修一下。
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())