【问题标题】:Creating SQL views in VBA在 VBA 中创建 SQL 视图
【发布时间】:2021-05-24 13:34:18
【问题描述】:

我正在尝试在我的数据库中名为petients 的表上创建一个视图。该表有五列。其中之一是我想保留患者入院日期的列。它的数据类型是日期时间,所以我想创建一个查询,根据current date 过滤此表中的数据。例如,我想创建一个仅显示当天记录的宠物详细信息的视图。

这是我的代码:

CREATE VIEW [dbo].[recent petients]
AS 
    SELECT petient_id, name, age, contact 
    FROM [petients] 
    WHERE [date] = 'date.Today'

我收到一条错误消息,提示无法将日期转换为字符串。你能帮我解决吗,或者我的代码哪里错了?

【问题讨论】:

  • 请您下次注意标点。我今天更正了。谢谢。
  • 用您正在使用的数据库标记您的问题。
  • 你说你想创建一个视图。为什么?这是在您的应用程序中实现的简单查询,您的应用程序可能需要以多种不同方式查询此表。那么您是否打算为每个“搜索”情况创建视图?添加到数据库的对象越多,维护和测试它们的工作就越多。我似乎也有等待被发现的架构问题 - 但这是一个非常不同的问题。

标签: sql-server vba sql-view


【解决方案1】:

您的代码看起来像 SQL Server 代码。如果是这样,我会推荐:

SELECT petient_id, name, age, contact
FROM [patients] 
WHERE [date] = CONVERT(date, GETDATE());

注意:此版本比DATEDIFF() 好得多,因为它允许在patient([date]) 上使用索引。

如果“日期”列有时间组件,您可以使用:

WHERE CONVERT(date, [date]) = CONVERT(date, GETDATE())

请注意,这在 SQL Server 中也是索引安全的。

【讨论】:

【解决方案2】:

我假设您使用的是 Microsoft SQL Server 的 Transact-SQL,但您应该指定您正在使用的 sql 方言。

由于datetime字段类型一般还包含时间,所以最好使用DATEDIFF函数:https://docs.microsoft.com/it-it/sql/t-sql/functions/datediff-transact-sql?view=sql-server-ver15

在您的情况下,仅考虑date=today 所在的记录,天数差必须为零:

--SQL QUERY
WHERE DATEDIFF(day, GETDATE(), [date]) = 0
  1. day 标识您要考虑差异的元素。可以在链接中找到名称或缩写列表
  2. GETDATE() 现在返回日期时间
  3. 第二个和第三个参数是您想要区分的日期

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2011-12-09
    相关资源
    最近更新 更多