如何仅获取自1月1日以来创建的MSSQL行?

时间:2013-06-12 22:56:42

标签: sql sql-server

我有一个脚本,它根据我编写的SQL查询将数据库信息写入csv。我最近的任务是修改查询以仅返回DateTime字段的日期比今年1月1日更新的行。以下查询不起作用:

$startdate = "01/01/2013 00:00:00"

SELECT Ticket, Description, DateTime
FROM [table]
WHERE ((Select CONVERT (VARCHAR(10), DateTime,105) as [DD-MM-YYYY])>=(Select CONVERT (VARCHAR(10), $startdate,105) as [DD-MM-YYYY]))"

数据库中DateTime字段的格式与$ startdate变量的格式相同。我究竟做错了什么?我的查询是否格式错误?感谢。

6 个答案:

答案 0 :(得分:2)

DECLARE @startdate datetime

SELECT  @startdate = '01/01/2013'

SELECT  Ticket, Description, DateTime
FROM    [table]
WHERE   DateTime >= @startdate

答案 1 :(得分:0)

您可以通过DATEDIFF

获取基于年度的记录
DECLARE @startdate datetime = '01/01/2013';
    SELECT Ticket, Description, DateTime
    FROM [table]
    WHERE DATEDIFF(YEAR,@startdate,DateTime) = 0 //It gives 0 if years are the same and DateTime is your column

答案 2 :(得分:0)

您可以使用以下方式获取当年的开始:

DateAdd( year, Year( GetDate() ) - 1900, 0 )

然后查询变为:

select Ticket, Description, [DateTime]
  from [Table]
  where [DateTime] >= DateAdd( year, Year( GetDate() ) - 1900, 0 )

如果您确实不想要从1月开始的行,请将比较从>=更改为>

答案 3 :(得分:0)

DECLARE @startdate datetime

SELECT  @startdate = '01/01/2013'

SELECT  Ticket, Description, DateTime
FROM    [table]
WHERE   DateTime >= @startdate

答案 4 :(得分:0)

有趣的问题,即解释有关SQL的要求。明年到来时,你会想要选择明年的门票。所以它应该是

SELECT  Ticket, Description, DateTime
FROM    [table]
WHERE   datePart(yy,DateTime)=datePart(yy,getDate())

答案 5 :(得分:0)

DECLARE @startdate datetime = '01/01/2013';
    SELECT Ticket, Description, DateTime
    FROM [table]
    WHERE DATEDIFF(DD,@startdate,DateTime) >= 0