如何使用Date从sql中获取数据

本文关键字:获取 数据 sql 何使用 Date | 更新日期: 2023-09-27 18:29:04

如何使用Date从sql中获取数据,我使用的数据类型是varchar,我想从sql表中获取记录。我想获取上个月的数据,例如今天的日期是2014年11月4日。从今天减去一个月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月份的数据。如何得到这个?

如何使用Date从sql中获取数据

1)如果您的OrderDate列类型是varchar,则字符串值"<="不是一个好的运算符,但如果其数据类型是日期、时间或日期时间,则仅"<="、">="即可。因此,最好将其转换为日期时间,而不是进行比较。

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')) 

理性地,您应该使用OrderDate作为DateTime数据类型。但在回答您的问题时,您需要在DatetimeDatatype中强制转换OrderDate,然后在WHERE条件下对其应用任何逻辑运算进行过滤。

因此,您的查询将为:

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

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

例如

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