我有一个 ASP 页面,它将从 SQL 服务器数据库表中获取记录。表“order_master”有一个名为 order_date 的字段。我想构建一个选择查询以获取订单日期>用户输入的日期(例如:07/01/2008)
我尝试了转换和强制转换,但两者都不起作用。order_date 列中的示例数据是 4/10/2008 8:27:41 PM。实际上,我不知道它是什么类型(varchar/datetime)。
有没有办法做到这一点?
我有一个 ASP 页面,它将从 SQL 服务器数据库表中获取记录。表“order_master”有一个名为 order_date 的字段。我想构建一个选择查询以获取订单日期>用户输入的日期(例如:07/01/2008)
我尝试了转换和强制转换,但两者都不起作用。order_date 列中的示例数据是 4/10/2008 8:27:41 PM。实际上,我不知道它是什么类型(varchar/datetime)。
有没有办法做到这一点?
我会先检查以确保 SQL 数据类型是 DateTime 或 SmallDateTime,然后再检查以确保您从页面中传递了 Date/DateTime 值。
如果这两个都是正确的,那么您最好遵循 Joel 的建议,并在尝试比较之前将这两个值显式转换为日期。另外,检查您正在查看的时间值的精度;这似乎很明显,但 1/1/2008 12:00:00.001 AM 将不等于 1/1/2008 12:00:00.000 AM。是的,我说的是经验。:P
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 上的在线图书
你可以像这样创建一个存储过程
CREATE PROCEDURE GetOrders
@OrderDate DATETIME
AS
SELECT
*
FROM order_master
WHERE Order_Date > @OrderDate
GO
然后,您可以在通过 ASP 代码调用存储过程之前将用户输入转换为日期。
编辑
我刚刚注意到关于列类型的注释,你可以运行这个命令
sp_help order_master
获取列信息以查找 order_date 的数据类型。
您是否尝试过将两个值转换为日期时间类型?
请记住,在比较日期时,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
你说你不知道字段类型。这将是第一个要解决的问题,找出来。你可以这样做: -
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Order_Master' AND
COLUMN_NAME = 'Order_Date'
如果它不是应转换的日期时间类型之一,如果这不是您的责任,那么请与确实有责任的人联系。
您关心日期的“格式”这一事实表明您可能正在使用串联构建 SQL。如果是这样,请停止这样做。使用带参数的命令并将日期作为日期类型传入。
现在您的问题是如何在客户端输入日期并将其转换为可在 ASP 代码中解析为日期的明确格式之一。
如果这不是您已解决的问题,请对此答案添加评论,我将扩展此答案。