【发布时间】:2009-08-21 14:41:55
【问题描述】:
你好。非常感谢您帮助创建可以完成以下任务的查询。问题在于动态地获得我们在欧洲所谓的“命名日”。 Nameday 是欧洲和拉丁美洲许多国家的传统,在一年中的特定日子庆祝与一个人的名字 (http://en.wikipedia.org/wiki/Name_day) 相关。
我所拥有的是所有名称及其对应日期的表格(我以“1900-08-22”这种格式存储日期,但我们确实需要月份和日期)
nameday 表:
name date
----------------
Bob 1900-04-22
Bob 1900-09-04
Frank 1900-01-02
...
诀窍是每个名字可能有多个条目,并且某人的“nameday”总是在生日之后首先找到。因此,假设 Bob #1 出生于 8 月 5 日,他的命名日将在 9 月 4 日,但如果我们出生在 9 月 4 日之后,他的命名日将在 4 月 22 日。
显然我和我的用户有一张桌子
用户表:
id first_name birth_date
------------------------------------
1 Bob 1975-08-05
2 Frank 1987-01-01
...
所以,一切都是基于生日的,我们需要根据名字和生日来找出某个人庆祝他/她的“命名日”的时间。当我需要一个 SQL 服务器查询时,它将能够为我的数据库中的人获取我的姓名;)
如果您认为将“nameday”表中的日期拆分为:月和日更容易,请告诉我,我们可以这样做。我需要能够为此想出最有效的解决方案。
非常感谢任何帮助,
呸呸
【问题讨论】:
-
我认为如果您在两个表中添加另一列并将月份和日期值作为 4 位数字值会更容易:nameday Bob 422、Bob 904、Frank 102;用户 Bob 805,Frank 101。然后您可以加入名称并更轻松地比较值。
-
比较日期值,即。
-
强烈建议不要使用 SQL 保留关键字作为表名 (
USER) 或列名 (DATE),即使是在伪数据或经过清理的数据中也是如此。
标签: sql sql-server-2005 sql-server-2008