[英]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.