如何使用Date从sql获取数据

时间:2014-11-04 08:47:17

标签: c# sql-server-2008 datetime datetime-format

如何使用Date从sql获取数据,我使用date数据类型作为varchar,我想从sql表中获取记录。我想获取上个月的数据,例如今天的日期是04/11/2014。从今天开始减去一个月04/10/2014所以我想按此日期搜索04/10/2014

我试过了这个问题。

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
  AND OrderDate <= '04/10/2014'

我也尝试过这个:

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
  AND OrderDate <= (CONVERT(VARCHAR(50), '04/10/2014', 103)) 

但它也显示了11月的数据。怎么弄这个?

3 个答案:

答案 0 :(得分:1)

1)如果您的OrderDate列类型是varchar而不是字符串值“&lt; =”不是一个好的运算符,但如果它的数据类型是日期,时间或日期时间而不仅仅是“&lt; =”,“&gt; =”将工作得很好。所以最好把它转换成日期时间而不是比较它。

2)如果你有比其更好的开始和结束日期将OrderDate列转换为datetime,然后使用“between”子句进行比较。

例如

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
AND (CONVERT(DATE, OrderDate) BETWEEN CONVERT(DATE, GETDATE()) AND CONVERT(DATE, '04-OCT-2014')) 
--If SQL Server 2008 or above 

--Or For below
SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
AND (CONVERT(DATETIME, OrderDate) BETWEEN GETDATE() AND CONVERT(DATETIME, '04-OCT-2014')) 

答案 1 :(得分:0)

如果由于某种原因您无法将列更改为正确的数据类型,我建议您将其转换为查询的日期时间。

E.G。

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
  AND CAST(OrderDate as DateTime)<=  '04/10/2014'

答案 2 :(得分:0)

Rationaly你应该使用OrderDate作为DateTime数据类型。但仍然回答你的问题,你需要在Datetime数据类型中强制转换OrderDate,而不是对它应用任何逻辑操作,以便在WHERE条件下进行过滤。

因此,您的查询将如下:

SELECT * 
FROM [IndxRpt] 
WHERE EcrCylinderNo IS NULL 
AND CONVERT(DATETIME,OrderDate,103) <= CONVERT(DATETIME,'04-OCT-2014',103)