2

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

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

有没有办法做到这一点?

4

6 回答 6

1

我会先检查以确保 SQL 数据类型是 DateTime 或 SmallDateTime,然后再检查以确保您从页面中传递了 Date/DateTime 值。

如果这两个都是正确的,那么您最好遵循 Joel 的建议,并在尝试比较之前将这两个值显式转换为日期。另外,检查您正在查看的时间值的精度;这似乎很明显,但 1/1/2008 12:00:00.001 AM 将不等于 1/1/2008 12:00:00.000 AM。是的,我说的是经验。:P

于 2008-10-15T19:11:20.280 回答
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) 开始,因此,那天的第一秒......简单地说,就是一整天。

有关更多信息,请查看 MSDN 上的在线图书

于 2008-10-15T19:12:27.233 回答
0

你可以像这样创建一个存储过程

CREATE PROCEDURE GetOrders
    @OrderDate DATETIME
AS
SELECT
    *
FROM order_master
WHERE Order_Date > @OrderDate

GO

然后,您可以在通过 ASP 代码调用存储过程之前将用户输入转换为日期。

编辑

我刚刚注意到关于列类型的注释,你可以运行这个命令

sp_help order_master

获取列信息以查找 order_date 的数据类型。

于 2008-10-15T19:02:32.370 回答
0

您是否尝试过将两个值转换为日期时间类型?

于 2008-10-15T19:04:29.857 回答
0

请记住,在比较日期时,4/10/2008 8:27:41 PM等于 4/10/2008。SQL Server 会将 4/10/2008 解释为 4/10/2008 12:00:00 AM,并精确比较到第二个。因此 4/10/2008 小于 4/10/2008 8:27:41 PM

于 2008-10-15T19:24:40.627 回答
0

你说你不知道字段类型。这将是第一个要解决的问题,找出来。你可以这样做: -

SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Order_Master' AND
    COLUMN_NAME = 'Order_Date'

如果它不是应转换的日期时间类型之一,如果这不是您的责任,那么请与确实有责任的人联系。

您关心日期的“格式”这一事实表明您可能正在使用串联构建 SQL。如果是这样,请停止这样做。使用带参数的命令并将日期作为日期类型传入。

现在您的问题是如何在客户端输入日期并将其转换为可在 ASP 代码中解析为日期的明确格式之一。

如果这不是您已解决的问题,请对此答案添加评论,我将扩展此答案。

于 2008-10-16T09:10:43.440 回答