繁体   English   中英

sql查询大于DATE(年)A但小于DATE(年)B

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM