如何使用sqlite设置星期几

时间:2013-11-14 17:43:09

标签: c++ sql qt sqlite

我用Employee创建了表,我有Name,WorkingDays等列(数据类型是日期)。我想编写一个输出类似的查询  “从员工中选择姓名,其中WorkingDay ='星期一','星期三'和'星期五'” 我想为工人们做一个烘焙师。我正在使用sqlite和QT。提前谢谢。

1 个答案:

答案 0 :(得分:1)

根据Date And Time Functions文档,您可以通过以下方式使用strftime函数:

SELECT Name FROM Employee WHERE strftime('%w',WorkingDay) IN ('1','3','5');

('1','3','5')分别为('Monday', 'Wednesday', 'Friday')


偏离主题的说明:

  

WorkingDays(数据类型为日期)

SQLite中没有这样的东西。来自Datatypes In SQLite Version 3文档:

  

1。2日期和时间数据类型

     

SQLite没有为存储日期留出的存储类   和/或时间。相反,SQLite的内置日期和时间函数   能够将日期和时间存储为TEXT,REAL或INTEGER   值:

     
      
  • TEXT as ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  •   
  • 真实的朱利安日数,即公元前4714年11月24日格林威治中午以来的天数。根据预示   阳历。
  •   
  • INTEGER as Unix Time,自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