SQL Server查询的WHERE条件
我们用下面的SQL片段在where
条件的SQL Server存储过程的:SQL Server查询的WHERE条件
convert(varchar, CreateDate, 101) <= convert(varchar, GETDATE() - @numberofdays, 101)
- 的
CreateDate
数据类型为datetime
- 的
@numberofdays
数据类型是int
你能否确认这种情况是否可以正常工作,在比较日期之前,数据类型是否转换为varchar?
CreateDate <= DATEADD(day,-1*@numberofdays,GETDATE())
感谢您回复Tapakah,但在我的问题上面写的查询是错误的还是会给出不正确的输出? – bhanu
Rigth比较datetime类型 –
@bhanu它会给你不正确的输出,返回12/01/2016大于01/01/2017。如果您确实需要字符串,则应使用格式111,而2016/12/01比2017/01/01小。 –
是的,它会工作。
见下面查询从他们
declare @numberofdays int
set @numberofdays=3
declare @CreateDate datetime
set @CreateDate= '2017-03-20'
select
convert(varchar,@CreateDate, 101) as date1,
convert(varchar,GETDATE()- @numberofdays,101) as date2
输出
date1 date2
03/20/2017 10/08/2017
这是在相同的格式,并将努力
它不会引发例外情况,但它会允许2016年日期(例如12/01/2016)被考虑大于2017年的日期(如01/01/2017)。 –
如果他坚持将它们转换为字符串,他应该使用格式111(yyyy/mm/dd) –
你为什么在比较它们之前将它们转换为字符串?,您可以将它们作为日期时间进行比较。 –
另外:'GETDATE() - @ NumberOfDays'不是很清楚 - 你肯定**减号运算符会减去天数吗?这是一个假设....我建议使用'DATEADD(DAYS,-1 * @numberofdays,GETDATE())'清晰明了。另外:你应该**总是**为'varchar'指定一个**显式长度** - 否则,当一个意外的默认长度启动时,你可能会遇到一个令人讨厌的惊喜..... –
@MarcGuillot表达式GETDATE() - NumberOfDays通过减去天数来返回正确的输出。你知道使用GETDATE() - NumberOfDays是否会有任何性能影响。如果是的话,我们可以使用dateadd()函数 – bhanu