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