[英]sql query greater than DATE (year) A but less than DATE (year) B
我有一個像這樣的項目清單:
Field: Name & Field: DOB
- David - 1962
- Robert - 1955
- Tracy - 1980
- Bono - 1964
- Betty - 1968
我需要一個簡單的SQL查詢,該查詢將返回所有出生年份在1960年代(1960-1969)的名字。 遵循此邏輯的一些東西:
$sql = "SELECT * FROM employees WHERE DOB => '1960' AND DOB =< '1969' AND ORDER BY name";
僅供參考:當前雇員數據庫中的DOB字段是VARCHAR字段,具有4個字符的名稱。
有人可以在這樣的查詢中為我指出正確的語法嗎?
您不應該將日期/時間信息存儲為varchar
,但是由於可以通過一種方法來篩選1960年代生日,因此只需檢查DOB
字段的前三個字符即可:
SELECT *
FROM employees
WHERE SUBSTRING(DOB, 1, 3) = '196'
ORDER BY name
您還可以使用原始方法,並使用以下WHERE
子句:
WHERE DOB >= '1960' AND DOB <= '1969'
但是,我不喜歡將字符串視為數字,因為如果字符串應該更改長度,則會發生奇怪的事情。 我建議您使用datetime
來存儲您的DOB
信息。
將查詢從以下位置更改:
"SELECT * FROM employees WHERE DOB => '1960' AND DOB =< '1969' AND ORDER BY name";
至
"SELECT * FROM employees WHERE DOB >= '1960' AND DOB <= '1969' AND ORDER BY name";
// Its >= or <= not => or =<
然后再試一次
假設您的varchar DOB列僅包含數字:
SELECT *
FROM employees
WHERE CONVERT(DOB, INTEGER) >= 1960
AND CONVERT(DOB, INTEGER) <= 1969
你嘗試過這個嗎?
$sql = "SELECT * FROM employees WHERE DOB Like '%YYY%'AND ORDER BY name";
考慮到yyy是196X,因此將產生所有以196開頭的dob。
但這還不夠具體
select * from tt1 where year >='1960' and year <='1969' order by name
希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.