2011-09-05 124 views
0

我有一个SQL查询,其中我将通过dd/mm/yyyy但SQL查询需要mm/dd/yyyy不同格式的SQL Server日期时间比较

如何启用此查询取dd/mm/yyyy并根据正确的格式显示正确的结果?在SQL Server 2008中实现这件事的最佳方式是什么?

SELECT int_ExchangeRateId, int_LocationId, dtm_Date 
FROM ExchangeRate 
WHERE dtm_Date >= '01/02/2006' AND dtm_Date <= '12/02/2006' AND int_LocationId = 98 

这工作正常:

SELECT int_ExchangeRateId, int_LocationId,dtm_Date 
FROM ExchangeRate 
WHERE CAST(dtm_Date AS DATE) BETWEEN '2006-02-02' AND '2006-02-12' 
    AND int_LocationId=98 
+2

使用'date'参数而不是字符串参数。如果你必须使用字符串,至少要使用一个明确的格式,如'yyyymmdd' –

+0

与你的问题无关,但我只需要评论,我发现它担心你的数据类型前缀字段的名称。 – Tony

回答

5

对于查询,我会使用YYYY-MM-DD格式的日期。至于输出见kalyan的答案。

编辑:总结下面的评论(感谢marc_s),必须要使用的格式YYYYMMDD当不包括部分时间除非您使用的是新的日期类型datedatetime2和SQL datetimeoffset Server 2008.

+1

其实 - 这个格式是**不是**语言无关....你需要使用'YYYYMMDD'(或:'YYYY-MM-DDTHH:MM:SS') –

+0

@marc_s - 我明白'YYYY-MM只要ISO 8601标准定义了一个日历日期(http://www.iso.org/iso/date_and_time_format),并且OP没有提到需要时间部分,“D-D”格式就是中立的。我很欣赏这可能不是SQL Server 2008的情况;我不得不再次看看BOL :) – Tony

+0

不,**它不是中性** - 试试这个:'set language british .... SELECT CAST('2011-08-26'AS DATETIME)' - * *这将失败!** - 与语言无关的ISO-8601格式为'YYYYMMDD'(没有破折号) - 相信我! –

2

参考DateTime Formating为了这个目的,通过提供某些参数,我们可以格式化日期成需要的格式。