选择查询中的SQL日期格式问题

时间:2008-10-15 18:59:11

标签: sql sql-server asp-classic date-format

我有一个ASP页面,它将从SQL服务器数据库表中获取记录。表“order_master”有一个名为order_date的字段。我想构建一个选择查询以获取订单日期>用户输入的日期(例如:07/01/2008)

我尝试使用转换和强制转换,但两者都无效。 order_date列中的示例数据是4/10/2008 8:27:41 PM。实际上,我不知道它是什么类型(varchar / datetime)。

有没有办法做到这一点?

6 个答案:

答案 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代码中解析为日期的无关格式。

如果那不是您已解决的问题,请在此答案中添加评论,我会扩展此答案。