我要做的是从日期字段中选择*,其中开始日期为9-1-去年,结束日期为8-31-当前年份,但我不想让年份具体化。
Select * from dbo."TABLE"
where (Date_Field) between (year(DATEADD(year,-1, getdate())) +'09-01') and ((YEAR( getdate())) +'08-31')
我收到“操作数类型冲突:日期与int不兼容”错误。
答案 0 :(得分:1)
您的查询存在的问题是您尝试将整数和字符串组合在一起,然后您尝试将它们用作日期。在许多情况下,您需要明确CAST
您的数据类型。此外,您在一年和其他日期之间错过了连字符。
WHERE <date_field> BETWEEN
CAST(CAST(YEAR(GETDATE()) - 1 AS CHAR(4)) + '-09-01' AS DATETIME) AND
CAST(CAST(YEAR(GETDATE()) AS CHAR(4)) + '-08-31' AS DATETIME)
通过使用日期函数和一些数学,您也可以在没有任何数据类型转换的情况下执行此操作:
BETWEEN
DATEADD(DAY, 30, DATEADD(MONTH, 7, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0))) AND
DATEADD(MONTH, 8, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) - 1, 0))
答案 1 :(得分:0)
$scope.value = vm.getValue();
var element = $compile('<span my-custom-directive="value"></span>')($scope);
return element[0].outerHTML;
就足够了。更重要的是,你错过了SELECT * from dbo."TABLE"
WHERE (Date_Field) BETWEEN CONVERT(varchar, YEAR(DATEADD(year, - 1,
GETDATE()))) + '-09-01' AND CONVERT(varchar, YEAR(GETDATE())) + '-08-31'
中的领先-
,而这可能是让你离开赛道的原因。