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

时间:2017-01-04 05:23:13

标签: mysql

我有一个像这样的项目列表:

Field: Name & Field: DOB
- David - 1962
- Robert - 1955
- Tracy - 1980
- Bono - 1964
- Betty - 1968

我需要一个简单的SQL查询,它将返回其出生年份在20世纪60年代(1960-1969)吃过的所有名字。这个逻辑的一些东西:

$sql = "SELECT * FROM employees WHERE DOB => '1960' AND DOB =< '1969' AND ORDER BY name";

仅供参考:目前员工数据库中的DOB字段是一个VARCHAR字段,其中包含4个字符。

有人能指出我对这种查询的正确语法吗?

5 个答案:

答案 0 :(得分:2)

你应该将日期/时间信息存储为varchar,但由于你有一种方法可以屏蔽20世纪60年代的生日,只需检查{{{的前三个字符1}} field:

DOB

您还可以使用原始方法,并使用以下SELECT * FROM employees WHERE SUBSTRING(DOB, 1, 3) = '196' ORDER BY name 子句:

WHERE

但是,我不喜欢将字符串视为数字,因为如果字符串应该改变长度,你就会发生奇怪的事情。我建议您使用WHERE DOB >= '1960' AND DOB <= '1969' 来存储datetime信息。

答案 1 :(得分:0)

更改查询:

"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 =<

再试一次

答案 2 :(得分:0)

假设您的varchar DOB列仅包含数字:

SELECT * 
FROM employees
WHERE CONVERT(DOB, INTEGER) >= 1960
   AND CONVERT(DOB, INTEGER) <= 1969

答案 3 :(得分:0)

你尝试过这个吗?

$sql = "SELECT * FROM employees WHERE DOB Like '%YYY%'AND ORDER BY name";

考虑yyy是196X所以所有以196开头的dob都会产生。

但这不够具体

答案 4 :(得分:0)

select * from tt1 where year >='1960' and year <='1969' order by name

希望这会有所帮助。