iT邦幫忙

0

SQL 如何查詢c日期是否存在資料a日期到b日期之中

sql
ru035pu4xx 4 年前4844 瀏覽

如題目,資料表有開始日期及結束日期
問題是說
當我得到某一個日期時
要如何找到是否存在某一筆資料的開始日期與結束日期之中

表單a
編號 | id | 開始日期 | 結束日期
1 | n01 | 2012/3/1 | 2012/4/18
2 | n02 | 2012/3/15 | 2012/3/18
3 | n03 | 2012/4/17 | 2012/5/1

得到 2012/3/16
select id from 表單a where ...??(如何下..?)

結果為
id
n01
n02

16
一級屠豬士
iT邦高手 1 級 ‧ 4 年前
最佳解答
<pre class="c" name="code">
用MySQL來實際操作一下.

CREATE TABLE ithelp0323 (
no INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
id CHAR(3) NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL);

INSERT INTO ithelp0323(id, start_date, end_date) VALUES
('n01', '2012/3/1', '2012/4/18'),
('n02', '2012/3/15', '2012/3/18'),
('n03', '2012/4/17', '2012/5/1');

SELECT id
FROM ithelp0323
WHERE STR_TO_DATE('2012/3/16', '%Y/%m/%d') >= start_date
AND STR_TO_DATE('2012/3/16', '%Y/%m/%d') <= end_date;

+-----+
| id  |
+-----+
| n01 |
| n02 |
+-----+
8
slime
iT邦大師 1 級 ‧ 4 年前

if between

12
markshu
iT邦好手 1 級 ‧ 4 年前

select id from 表單a where 某一個日期 between 開始日期 and 結束日期

2
summertw
iT邦好手 1 級 ‧ 4 年前

這一看就知道大概是學校出的功課...

ru035pu4xx iT邦新手 5 級 ‧ 4 年前 檢舉

我剛入門
目前正在試寫一個網頁
之前沒有很鑽研SQL語法
才來這提問

ru035pu4xx iT邦新手 5 級 ‧ 4 年前 檢舉

而且我不知道日期也可以拿來比較 !! Orz

現在知道了~

summertw iT邦好手 1 級 ‧ 4 年前 檢舉

日期的計算原理在資料庫中,並不是很難..
當你在劃面上輸入yyyy/mm/dd HH:MM:SS時,資料庫裡,並非是做你所見的格式一樣的資料,而是一個整數的數字,數字有多大,我沒有記,你可以自己去查一下SQL的說明。
MS SQL 在2005之前,是沒有 Date這個資料型態的,只有DateTime這個資料型態,資料應該是從1753/01/01 00:00:00開始計算,一直到9999/12/31 23:59:59,這些在資料庫裡,都會被轉換成一個整數的數字,因此,在運算過程是可以拿來做比較、運算的。
在MS SQL裡,DateTime的這個起算點【1753/01/01 00:00:00】,是一個有趣的年份,有興趣的人,可以去查一下為什麼要用1753年,而不用其他的年份。
ru035pu4xx兄,希望這些對你有幫助。
以上的規則一樣適用於其他的資料庫(起算點可能有所不同),不管在比較、運算、觀念的使用上,皆同,有些甚至就函數名稱皆一樣(不曉得算不算抄襲)...

我要發表回答

立即登入回答