1

Employee を含むテーブルを作成しました。名前、WorkingDays (データ型は日付) などの列があります。"select Name from Employee where WorkingDay = 'monday', 'wednesday' and 'friday'" のようなものを出力するクエリを書きたいと思っています。私はsqliteとQTを使用しています。前もって感謝します。

4

1 に答える 1

2

日付と時刻関数のドキュメントに従って、次strftimeの方法で関数を使用できます。

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

それぞれどこ('1','3','5')にいますか('Monday', 'Wednesday', 'Friday')


トピック外のメモ:

WorkingDays (データ型は日付)

SQLite にはそのようなものはありません。SQLite バージョン 3 ドキュメントのデータ型から:

1.2 日付と時刻のデータ型

SQLite には、日付や時刻を格納するためのストレージ クラスが用意されていません。代わりに、SQLite の組み込みの日付と時刻関数は、日付と時刻を TEXT、REAL、または INTEGER 値として格納できます。

  • ISO8601 文字列としての TEXT ("YYYY-MM-DD HH:MM:SS.SSS")。
  • ユリウス日としての REAL。先発グレゴリオ暦による紀元前 4714 年 11 月 24 日のグリニッジ正午からの日数。
  • UNIX 時間としての INTEGER、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
于 2013-11-14T22:07:23.730 に答える