如何使用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月的数据。怎么弄这个?
答案 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)