0

我有一个脚本,它根据我编写的 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 变量的格式相同。我究竟做错了什么?我的查询格式是否错误?谢谢。

4

6 回答 6

2
DECLARE @startdate datetime

SELECT  @startdate = '01/01/2013'

SELECT  Ticket, Description, DateTime
FROM    [table]
WHERE   DateTime >= @startdate
于 2013-06-12T23:01:13.140 回答
0

您可以使用以下方法获取当前年份的开始:

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

然后查询变为:

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

如果您真的不希望从 1 月开始的行首先将比较从 更改>=>

于 2013-06-12T23:56:43.557 回答
0

有趣的问题与解释 SQL 的需求一样多。明年到来时,您将要选择明年的门票。所以应该是

SELECT  Ticket, Description, DateTime
FROM    [table]
WHERE   datePart(yy,DateTime)=datePart(yy,getDate())
于 2013-06-13T04:51:32.633 回答
0
DECLARE @startdate datetime = '01/01/2013';
    SELECT Ticket, Description, DateTime
    FROM [table]
    WHERE DATEDIFF(DD,@startdate,DateTime) >= 0 
于 2013-06-13T04:56:30.283 回答
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
于 2013-06-12T23:08:26.410 回答
0
DECLARE @startdate datetime

SELECT  @startdate = '01/01/2013'

SELECT  Ticket, Description, DateTime
FROM    [table]
WHERE   DateTime >= @startdate
于 2013-06-13T02:51:13.003 回答