我有一个ASP页面,它将从SQL服务器数据库表中获取记录。表“order_master”有一个名为order_date的字段。我想构建一个选择查询以获取订单日期>用户输入的日期(例如:07/01/2008)
我尝试使用转换和强制转换,但两者都无效。 order_date列中的示例数据是4/10/2008 8:27:41 PM。实际上,我不知道它是什么类型(varchar / datetime)。
有没有办法做到这一点?
答案 0 :(得分:1)
我首先检查以确保SQL数据类型是DateTime或SmallDateTime,然后我会检查以确保您从页面传入Date / DateTime值。
如果这些都是正确的,那么你可能会更好地遵循Joel的建议并在尝试比较之前将两个值显式转换为日期。另外,检查您正在查看的时间值的精度;这似乎是显而易见的,但是1/1/2008 12:00:00.001 AM将不等于1/1/2008 12:00:00.000 AM。是的,我是根据经验说的。 :P
答案 1 :(得分:1)
07/01/2008日期是英国/法国的注释,所以你需要做的就是:
SELECT myColumn FROM myTable WHERE myDateField >= convert(datetime, '07/01/2008 00:00:00', 103)
此代码将获取myDateField具有日期为2008年1月7日的所有行,从00:00:00开始(hh:mm:ss)所以,那天的第一秒......简单来说,就是整天。
了解更多信息,check Books online on MSDN
答案 2 :(得分:0)
您可以像这样创建一个存储过程
CREATE PROCEDURE GetOrders
@OrderDate DATETIME
AS
SELECT
*
FROM order_master
WHERE Order_Date > @OrderDate
GO
然后,您可以在通过ASP代码调用存储过程之前将用户输入转换为日期。
修改强>
我刚刚注意到有关列类型的说法,您可以运行此命令
sp_help order_master
获取列信息以查找order_date的数据类型。
答案 3 :(得分:0)
您是否尝试过CONVERT()将两个值转换为日期时间类型?
答案 4 :(得分:0)
请记住,在比较日期时,4/10/2008 8:27:41 PM 不等于4/10/2008。 SQL Server将4/10/2008解释为4/10/2008 12:00:00 AM,并将完全比较到第二个。因此,2008年4月10日不到4/10/2008 8:27:41 PM
答案 5 :(得分:0)
您声明您不知道字段类型。这将是第一个要解决的问题,找出答案。你可以这样做: -
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Order_Master' AND
COLUMN_NAME = 'Order_Date'
如果它不是日期时间类型之一,那么它应该被转换,如果这不是你的责任,那么请找一个有责任的人。
您担心日期的“格式”这一事实表明您可能正在使用串联构建SQL。如果是这样就停止这样做。使用带参数的命令并将日期作为日期类型传递。
现在您的问题是如何在客户端输入日期并将其转换为可以在ASP代码中解析为日期的无关格式。
如果那不是您已解决的问题,请在此答案中添加评论,我会扩展此答案。