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