C++ 如何使用sqlite设置一周中的几天

C++ 如何使用sqlite设置一周中的几天,c++,sql,qt,sqlite,C++,Sql,Qt,Sqlite,我已经用Employee创建了一个表,我有一些列,比如Name、WorkingDays(数据类型是date)。我想写一个查询,输出如下内容 “从工作日=‘星期一’、‘星期三’和‘星期五’的员工中选择姓名” i、 我想为工人们做一个烤炉。我正在使用sqlite和QT。提前感谢。根据文档,您可以通过以下方式使用strftime功能: SELECT Name FROM Employee WHERE strftime('%w',WorkingDay) IN ('1','3','5'); 其中('1',

我已经用Employee创建了一个表,我有一些列,比如Name、WorkingDays(数据类型是date)。我想写一个查询,输出如下内容 “从工作日=‘星期一’、‘星期三’和‘星期五’的员工中选择姓名” i、 我想为工人们做一个烤炉。我正在使用sqlite和QT。提前感谢。

根据文档,您可以通过以下方式使用strftime功能:

SELECT Name FROM Employee WHERE strftime('%w',WorkingDay) IN ('1','3','5');
其中
('1','3','5')
分别是
('周一','周三','周五')


离题说明:

工作日(数据类型为日期)

SQLite中没有这样的东西。从文件:

1.2日期和时间数据类型

SQLite没有为存储日期而预留的存储类 和/或时间。相反,SQLite的内置日期和时间函数 能够将日期和时间存储为文本、实数或整数 价值观:

  • 文本为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)
  • 真实的朱利安日数字,根据序言,自公元前4714年11月24日格林威治中午以来的天数 公历
  • 整数表示Unix时间,自1970-01-01 00:00:00 UTC以来的秒数
应用程序可以选择将日期和时间存储在其中任何一个中 格式,并使用内置的日期和 时间函数

更新 例如,如果今天是星期五,那么这个名字 出现在今天工作的名称上。可能吗

是的。只需正确使用strftime()函数即可。我给你举个小例子:

CREATE TABLE Employee(
    id INTEGER PRIMARY KEY, 
    name  VARCHAR
);

CREATE TABLE WorkingDays(
    id INTEGER PRIMARY KEY, 
    employee INTEGER, 
    dayNumber INTEGER, 
    FOREIGN KEY(employee) REFERENCES Employee(id),
    UNIQUE(employee,dayNumer)
);

INSERT INTO Employee(name) VALUES('Max');
INSERT INTO Employee(name) VALUES('dic19');
INSERT INTO WorkingDays(employee,dayNumber) VALUES(1,1); --Max, Monday
INSERT INTO WorkingDays(employee,dayNumber) VALUES(1,2); --Max, Tuesday
INSERT INTO WorkingDays(employee,dayNumber) VALUES(1,3); --Max, Wednesday
INSERT INTO WorkingDays(employee,dayNumber) VALUES(2,4); --dic19, Thursday
INSERT INTO WorkingDays(employee,dayNumber) VALUES(2,5); --dic19, Friday
INSERT INTO WorkingDays(employee,dayNumber) VALUES(2,6); --dic19, Saturday

SELECT e.name
FROM  WorkingDays w 
LEFT JOIN  Employee e ON  w.employee = e.id
WHERE cast(w.dayNumber as text) = strftime('%w','now');
-- Right now it should return 'dic19' because Today is Friday/Saturday (depends on time zone)

SELECT e.name 
FROM  WorkingDays w 
LEFT JOIN  Employee e ON  w.employee = e.id 
WHERE cast(w.dayNumber as text) = strftime('%w','2013-11-11');
-- Should return 'Max' because '2013-11-11' was Monday

让我们看看你到目前为止都做了些什么。显示努力会让你得到结果,到目前为止,你还没有显示任何结果。请提供更多关于你的模式的详细信息,特别是工作日的数据类型。您好,感谢您的回复。实际上已经阅读了sqlite文档[我知道如果您编写一个类似“select strftime”(“%w”,“2013-11-14”)的查询“它给出了一周中的哪一天。但问题是如何得到大约30天。首先,我想知道这是否可能?谢谢你……谢谢dic19的回复……我运行了查询,它给了我那些工作日期介于这两天之间的人的姓名。我想知道……怎么可能说某个工人有‘星期一’“,“星期三”和“星期五”作为他的工作日。因此,例如,如果今天是星期五,则此名称将自动显示在今天工作的名称上。是否可能?您好!是的。我正在编写一个小示例来演示这一点。但关键是此函数:
strftime(“%w”,“now”)
@Max…哇,这太不可思议了。我想知道我要花多少天才能弄明白……非常感谢:-)