如何使用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月份的数据。如何得到这个?
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'